{
  "openapi": "3.1.0",
  "info": {
    "title": "云手机本地 API",
    "description": "通过 MoreLogin 本地 API 管理云手机实例。基础URL: http://127.0.0.1:40000。本地 API 与 MoreLogin 桌面应用一起运行在您的计算机上。所有请求必须来自同一台计算机。",
    "version": "2026-09-05"
  },
  "tags": [
    {
      "name": "Cloud Phone Management",
      "description": "Cloud Phone Management 相关 API。"
    },
    {
      "name": "Live Streaming",
      "description": "启动、查询和停止云手机直播。"
    },
    {
      "name": "Account & Quotas",
      "description": "查询钱包余额与云手机用量配额。"
    },
    {
      "name": "ADB",
      "description": "ADB 相关 API。"
    },
    {
      "name": "Files",
      "description": "Files 相关 API。"
    },
    {
      "name": "Apps",
      "description": "Apps 相关 API。"
    },
    {
      "name": "Schedules",
      "description": "Schedules 相关 API。"
    },
    {
      "name": "Touch",
      "description": "Touch 相关 API。"
    },
    {
      "name": "Monthly Billing",
      "description": "查询可购买的包月套餐并激活包月云手机。"
    }
  ],
  "x-tagGroups": [
    {
      "name": "",
      "tags": [
        "Cloud Phone Management",
        "Live Streaming",
        "Account & Quotas",
        "ADB",
        "Files",
        "Apps",
        "Schedules",
        "Touch",
        "Monthly Billing"
      ]
    }
  ],
  "paths": {
    "/api/balance": {
      "get": {
        "operationId": "getAccountAndCloudPhoneQuotasLocal",
        "summary": "查询账户余额和云手机余量",
        "description": "返回团队钱包余额与云手机使用额度。\n- **前置条件**：调用成员需要费用权限。钱包按团队查询，因此这些数字是团队级的，不是成员级的。\n- **副作用**：无。只读。可带退避安全重试。\n- **单位**：`balance` 是钱包余额，单位为**分**，不是元。`remainingDuration` 是云手机剩余分钟数，`remainingConcurrency` 是并发槽位数；两者都会被截断到 0，不会为负。\n- **返回内容**：只有这三个数字。上游存在冻结金额、已用与赠送时长的拆分、到期时间，但这里刻意不暴露。\n- **说明**：钱包或额度查询任一失败，整个调用即失败；它从不返回部分数据。",
        "tags": [
          "Account & Quotas"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/BalanceResponse"
          }
        }
      }
    },
    "/api/cloudphone/monthly/skus": {
      "get": {
        "operationId": "listMonthlyCloudPhoneSkus",
        "summary": "查询可购买的包月云手机套餐",
        "description": "返回当前可供调用团队购买的包月云手机商品。\n\n- **副作用**：无。该调用不会占用容量，也不会扣除团队余额。只读，可带退避安全重试。\n- **用途**：将返回的 `skuId` 传给 [`/api/cloudphone/create`](./local-api.yaml#operation/createUsingPOST)。价格单位为美分，当前包月周期为 30 天。\n- **空结果**：`data` 为空数组表示当前没有可用的包月商品。\n\n常见业务错误见 [Error Codes](../Getting%20Started/error-codes.md)。\n- **客户端版本**：需要 MoreLogin 桌面客户端 v2.65.0 或更高版本；旧版本客户端不提供此 Local API 路由。",
        "tags": [
          "Monthly Billing"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/MonthlyCloudPhoneSkusResponse"
          }
        }
      }
    },
    "/api/cloudphone/monthly/activate": {
      "post": {
        "operationId": "activateMonthlyCloudPhones",
        "summary": "购买并激活包月云手机",
        "description": "购买并激活 1 至 10 台包月云手机，使用期为 30 天。\n\n- **扣费提醒**：**该操作会真实扣除团队余额。**\n- **权限**：调用成员必须具有**费用/支付管理**权限，否则返回 `99012`。\n- **先创建**：请先通过 [`/api/cloudphone/create`](./local-api.yaml#operation/createUsingPOST) 创建云手机。创建仅生成未激活记录，不会扣费。\n- **选择规则**：ID 必须互不重复、属于当前团队，使用有效的 30 天包月商品，并具有兼容的购买状态。允许一次购买不同的包月 SKU。混合已支付与未支付手机、来自不同已支付订单的手机、存在待处理客户端订单或并发购买时，整个请求都会被拒绝。\n- **扣费与恢复**：校验和扣费为全有或全无，不会发生部分扣费。如果所有手机都属于同一个已支付订单，服务端会恢复已有权益，不会重复扣费。Local API、Open API 与桌面客户端共享同一订单状态。\n- **完成信号**：成功表示全部手机已确认激活 30 天；不会自动开机，也不会开启自动续费。\n- **未确认激活**：返回 `33422` 时，`data.results` 仍然完整并保持请求顺序。请逐项检查 `status`、`expireTime` 和 `errorCode`，不要把整个结果视为缺失。\n- **重试**：没有调用方幂等键。超时后先通过 [`/api/cloudphone/info`](./local-api.yaml#operation/infoUsingPOST) 或 [`/api/cloudphone/page`](./local-api.yaml#operation/pageUsingPOST) 检查计费与到期状态，再决定是否重试。\n- **客户端版本**：需要 MoreLogin 桌面客户端 v2.65.0 或更高版本；旧版本客户端不提供此 Local API 路由。\n\n已记录的业务错误码：`20002`、`20003`、`20004`、`20008`、`20041`、`20055`、`20068`、`20070`、`20071`、`33420`、`33421`、`33422`、`99001`、`99002`、`99012`。各错误码含义见 [Error Codes](../Getting%20Started/error-codes.md)；接口还可能返回通用错误码。\n- **客户端版本**：需要 MoreLogin 桌面客户端 v2.65.0 或更高版本；旧版本客户端不提供此 Local API 路由。",
        "tags": [
          "Monthly Billing"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MonthlyCloudPhoneActivateRequest"
              },
              "example": {
                "ids": [
                  "1724032706822188",
                  "1724032729890861"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/MonthlyCloudPhoneActivateResponse"
          }
        }
      }
    },
    "/api/cloudphone/live/start": {
      "post": {
        "operationId": "startCloudPhoneLiveStreamingLocal",
        "summary": "开始直播",
        "description": "在云手机上开始直播一个已上传的 MP4 文件。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用，且机型必须支持直播。`fileId` 必须指向一个已完成上传的直播素材文件，其他情况会以无效或已失效被拒绝。\n- **完成信号**：**已受理，未完成。** 响应仅表示设备服务已接受请求。请轮询 `/cloudphone/live/status` 直到 `liveStatus` 为 `1`。\n- **说明**：仅支持 MP4 的限制在上传文件时校验，不在本接口。\n- **重试**：没有去重；重复调用会再次下发开始命令。\n\n已记录的业务错误码：`33300`, `33301`, `33401`, `33418`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "tags": [
          "Live Streaming"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneLiveStartRequest"
              },
              "example": {
                "phoneId": "190000000000000001",
                "fileId": "820000000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CloudPhoneLiveBooleanResponse"
          }
        }
      }
    },
    "/api/cloudphone/live/status": {
      "post": {
        "operationId": "getCloudPhoneLiveStreamingStatusLocal",
        "summary": "查询直播状态",
        "description": "查询云手机当前是否正在直播。\n\n- **前置条件**：云手机必须属于你的团队，且机型必须支持直播。与开始和停止不同，本接口**不要求**云手机已开机或被你占用。\n- **副作用**：无。只读。可带退避安全重试。\n- **取值**：`liveStatus` 为 `0`（未直播）或 `1`（直播中）。**没有失败状态**——未生效的开始只会一直停在 `0`，所以轮询必须设超时上限。\n\n已记录的业务错误码：`33300`, `33401`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "tags": [
          "Live Streaming"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneLivePhoneRequest"
              },
              "example": {
                "phoneId": "190000000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CloudPhoneLiveStatusResponse"
          }
        }
      }
    },
    "/api/cloudphone/live/end": {
      "post": {
        "operationId": "stopCloudPhoneLiveStreamingLocal",
        "summary": "结束直播",
        "description": "停止云手机上的直播。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用，且机型必须支持直播。**不校验当前是否真的在直播**——无论如何都会下发停止命令。\n- **完成信号**：已受理，未完成。请轮询 `/cloudphone/live/status` 直到 `liveStatus` 为 `0`。\n- **重试**：效果幂等；重复调用只是再发一次停止命令。\n\n已记录的业务错误码：`33300`, `33301`, `33401`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "tags": [
          "Live Streaming"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneLivePhoneRequest"
              },
              "example": {
                "phoneId": "190000000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CloudPhoneLiveBooleanResponse"
          }
        }
      }
    },
    "/api/cloudphone/uploadFile": {
      "post": {
        "summary": "上传文件",
        "deprecated": false,
        "description": "把本地文件直接上传到云手机（旧版分片流程）。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用。从签名地址步骤取得的上传码是一次性的。\n- **完成信号**：响应仅表示 Local API 已接受此次传输。**不暴露任务 ID，也没有轮询状态**，因此无法观察进度。\n- **改用**：当你需要可观察的进度与重试处理时，请走 `/api/cloudphone/upload/file/signedUrl` → `PUT` → `/api/cloudphone/upload/file` → `/api/cloudphone/upload/file/result`。\n- **说明**：本路径与 Open API 的 `/cloudphone/uploadFile` 不是同一个操作，后者登记的是已上传好的对象。\n\n已记录的业务错误码：`33401`, `33419`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "operationId": "fileUploadUsing",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "id",
                  "file",
                  "uploadDest"
                ],
                "properties": {
                  "id": {
                    "description": "Cloud phone ID",
                    "type": "string",
                    "examples": [
                      "1661515884160372"
                    ],
                    "example": "1661515884160372"
                  },
                  "file": {
                    "format": "binary",
                    "type": "string",
                    "description": "File to upload",
                    "examples": [
                      "file://D:\\application\\apifox\\LICENSE.electron.txt"
                    ],
                    "example": "file://D:\\application\\apifox\\LICENSE.electron.txt"
                  },
                  "uploadDest": {
                    "description": "Upload destination directory",
                    "type": "string",
                    "examples": [
                      "/Download"
                    ],
                    "example": "/Download"
                  }
                }
              },
              "example": {
                "id": "1661515884160372",
                "file": "file://D:\\application\\apifox\\LICENSE.electron.txt",
                "uploadDest": "/Download"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The Local API accepted the direct upload and returns an empty JSON object.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "maxProperties": 0,
                  "properties": {}
                },
                "example": {}
              }
            }
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/upload/file/signedUrl": {
      "post": {
        "operationId": "getCloudPhoneUploadSignedUrlLocal",
        "summary": "获取临时上传文件 URL",
        "deprecated": false,
        "description": "申请一个预签名 URL，用于上传将要发送给云手机的文件。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用。\n- **完成信号**：同步。**预签名 URL 有效期为一小时。** 用 `PUT` 把文件内容上传到该地址，然后调用 `/api/cloudphone/upload/file` 登记。\n- **说明**：临时对象会在 7 天后自动删除。\n- **接口面说明**：与 Open API 的 `/cloudphone/uploadUrl` 是同一套实现。",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  },
                  "fileName": {
                    "type": "string",
                    "description": "File name"
                  }
                },
                "required": [
                  "fileName",
                  "id"
                ]
              },
              "example": {
                "fileName": "icon.png",
                "id": "1666625111121936"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `presignedUrl`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "presignedUrl": {
                          "type": "string",
                          "description": "Upload file url.Please use HTTP PUT request for file upload"
                        }
                      },
                      "required": [
                        "presignedUrl"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ],
                  "description": "Response code, 0 indicates success,>0 indicates failure"
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "presignedUrl": "https://example-bucket.s3.amazonaws.com/prod/cloudPhoneOpenApi/1666625111121936/20260901/demo.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=3600&X-Amz-Signature=EXAMPLE"
                  },
                  "requestId": "d0b850e2c3d54279b524e9540a358e0a"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/upload/file": {
      "post": {
        "operationId": "uploadCloudPhoneFileByUrlLocal",
        "summary": "上传文件至网址",
        "deprecated": false,
        "description": "登记一个已上传的文件，让云手机去下载它。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用，且**该对象必须已经存在于给定 URL**——服务会去探测它，读不到就拒绝请求。直播素材必须是 MP4，且目标机型需支持直播。\n- **完成信号**：**已受理，未完成。** 响应返回 `fileId` 和一个进行中状态；请轮询 `/api/cloudphone/upload/file/result`。\n- **接口面说明**：与 Open API 的 `/cloudphone/uploadFile` 是同一套实现。不要与本接口面上那条较旧的 `/api/cloudphone/uploadFile` 分片上传链路混淆。\n\n已记录的业务错误码：`33401`, `33419`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  },
                  "url": {
                    "type": "string",
                    "description": "Upload url, which can be the link returned by the cloudphone/upload/file/signedURL interface or other publicly accessible file download address"
                  },
                  "uploadDest": {
                    "type": "string",
                    "description": "Storage directory"
                  },
                  "uploadType": {
                    "type": "integer",
                    "enum": [
                      1,
                      2
                    ],
                    "default": 1,
                    "description": "File type (1 = regular file, 2 = MP4 live-streaming file)"
                  }
                },
                "required": [
                  "url",
                  "id",
                  "uploadDest"
                ]
              },
              "example": {
                "url": "https://example-bucket.s3.amazonaws.com/prod/cloudPhoneOpenApi/1666625111121936/20260901/demo.mp4",
                "id": "1666625111121936",
                "uploadDest": "/Download",
                "uploadType": 2
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `id`, `fileId` and `status`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Cloud phone id"
                        },
                        "fileId": {
                          "type": "string",
                          "description": "Upload file id"
                        },
                        "status": {
                          "type": "integer",
                          "description": "Upload status;0:uploading in progress, 1:upload successful, 2:upload failed"
                        }
                      },
                      "required": [
                        "id",
                        "fileId",
                        "status"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "id": "1666625111121936",
                    "fileId": "10069435",
                    "status": 0
                  },
                  "requestId": "e5d69c5e2d364106a0715dab1d9a03d3"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/upload/file/result": {
      "post": {
        "operationId": "getCloudPhoneUploadResultLocal",
        "summary": "文件上传结果",
        "deprecated": false,
        "description": "轮询文件上传到云手机的状态。\n\n- **取值**：`0` 上传中，`1` 成功，`2` 失败。\n- **空结果**：找不到该 `fileId` 时调用仍然成功，但 `data` 为 null。请把它理解为「尚未可见或已不存在」，而不是失败。\n- **开销**：该查询会扫描设备服务的文件列表；请以适度间隔轮询。\n- **接口面说明**：与 Open API 的 `/cloudphone/uploadFileResult` 是同一套实现。",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "fileId": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "fileId"
                ]
              },
              "example": {
                "id": "1666625111121936",
                "fileId": "10069434"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `id`, `fileId` and `status`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Cloud phone id"
                        },
                        "fileId": {
                          "type": "string",
                          "description": "Upload file id"
                        },
                        "status": {
                          "type": "integer",
                          "description": "Upload file status;0:uploading in progress, 1:upload successful, 2:upload failed"
                        }
                      },
                      "required": [
                        "id",
                        "fileId",
                        "status"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "id": "1666625111121936",
                    "fileId": "10069435",
                    "status": 0
                  },
                  "requestId": "e5d69c5e2d364106a0715dab1d9a03d3"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/download": {
      "post": {
        "operationId": "downloadCloudPhoneFileLocal",
        "summary": "文件下载",
        "deprecated": false,
        "description": "从云手机下载文件。\n- **前置条件**：云手机必须已开机且未被其他成员占用。\n- **副作用**：服务端先扫描父目录再启动传输，因此路径不存在会在**这一步**失败，而不是在状态轮询时。目标必须是普通文件，不能是目录。\n- **完成信号**：**已受理，未完成。** 响应返回 `downId`；轮询 `/cloudphone/download/result` 直到状态为成功、失败或已取消。该状态接口会重新校验云手机仍已开机且仍归你占用。\n- **重试**：不幂等——每次调用都会重新扫描并生成新的 `downId`。\n\n已记录的业务错误码：`33300`, `33301`, `33507`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  },
                  "filePath": {
                    "type": "string",
                    "description": "file path: /sdcard/Download/a.txt\n"
                  }
                },
                "required": [
                  "filePath",
                  "id"
                ]
              },
              "example": {
                "filePath": "/sdcard/Download/report.csv",
                "id": "1661515884160372"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `id` and `downId`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Cloud phone id"
                        },
                        "downId": {
                          "type": "string",
                          "description": "File download id "
                        }
                      },
                      "required": [
                        "id",
                        "downId"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": "",
                  "data": {
                    "id": "1661515884160372",
                    "downId": "1661515884160999"
                  },
                  "requestId": "7dcf166a597842139af5ce12d25fe0f8"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/download/result": {
      "post": {
        "operationId": "getCloudPhoneDownloadResultLocal",
        "summary": "文件下载结果",
        "deprecated": false,
        "description": "轮询云手机文件导出任务的状态。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用。传入下载请求返回的 `downId`。\n- **取值**：**与上传是另一套刻度**——`10` 进行中，`20` 成功，`30` 失败，`40` 已取消。只有成功后 `downUrl` 才有值。\n- **说明**：「文件不存在」由下载请求本身报出（它会先扫描父目录），不是由本接口报出。",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  },
                  "downId": {
                    "type": "string",
                    "description": "File download ID"
                  }
                },
                "required": [
                  "downId",
                  "id"
                ]
              },
              "example": {
                "downId": "1661515884160999",
                "id": "1661515884160372"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `status`, `downId` and `downUrl`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "integer",
                          "description": "Download file status;10:Running, 20:Successful, 30:Failed, 40:Cancelled"
                        },
                        "downUrl": {
                          "type": "string",
                          "description": "File download URL; use it only when status is 20"
                        },
                        "downId": {
                          "type": "string",
                          "description": "File download task ID"
                        }
                      },
                      "required": [
                        "status",
                        "downId"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "status": 20,
                    "downId": "1661515884160999",
                    "downUrl": "https://get.morelogin.com/..."
                  },
                  "requestId": "17d9dbfd958e4f40a51897520138d3ff"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/setKeyBox": {
      "post": {
        "operationId": "setCloudPhoneKeyBoxLocal",
        "summary": "设置钥匙盒",
        "deprecated": false,
        "description": "在云手机上安装 keybox 证书。\n\n- **前置条件**：`filePath` 必须指向一个 `.xml` 文件，且云手机必须已开机且未被其他成员占用。\n- **副作用**：把证书路径交给设备服务。MoreLogin 不做存储，服务也没有定义生效步骤——设备是否需要重启才能让证书生效属于设备行为。\n- **完成信号**：设备服务同步受理。没有接口能回报已安装的证书。",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "filePath": {
                    "type": "string",
                    "description": "文件路径，例如：/sdcard/Download/xxx.xml"
                  },
                  "id": {
                    "type": "string",
                    "description": "云手机ID"
                  }
                }
              },
              "example": {
                "filePath": "",
                "id": "0"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功。`data` 是单个布尔值。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码：0 = 成功，>0 = 错误"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求唯一标识；联系支持时请提供"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": true,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/app/install": {
      "post": {
        "operationId": "installCloudPhoneAppLocal",
        "summary": "在云手机上安装应用",
        "deprecated": false,
        "description": "从团队应用库把应用安装到云手机。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用。应用必须已存在于团队应用库或公共应用市场——用 `appVersionId` 指定，或用 `packageName` 加 `versionCode`。该应用还必须已上传到这台云手机可访问的应用库，否则安装失败。\n- **限流**：每台云手机每秒最多一次安装，更快的第二次调用会被拒绝。\n- **完成信号**：**已受理，未完成。** 响应仅表示请求已入队。请轮询 `/cloudphone/app/installedList` 确认应用是否到位。\n- **重试**：确认安装列表后可以重试，但受每秒一次的限制。\n\n已记录的业务错误码：`33005`, `33014`, `33714`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "appVersionId": {
                    "description": "应用版本 ID",
                    "type": "string"
                  },
                  "id": {
                    "description": "云手机ID",
                    "type": "string"
                  },
                  "packageName": {
                    "description": "包名 — 仅当未提供 appVersionId 时才需要",
                    "type": "string"
                  },
                  "versionCode": {
                    "description": "版本代码——仅当未提供 appVersionId 时才需要。",
                    "type": "integer"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "appVersionId": "1672940217990530",
                "id": "1673823102599682"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功。`data` 是单个布尔值。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": true,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/app/page": {
      "post": {
        "operationId": "listCloudPhoneAppsLocal",
        "summary": "获取 APP 应用列表",
        "deprecated": false,
        "description": "列出可安装到云手机的应用。\n\n- **副作用**：无。只读。可带退避安全重试。 不涉及具体云手机，因此不要求云手机处于运行状态。\n- **返回内容**：公共应用市场——全局可用的应用，加上定向对你团队开放的应用。每条记录的版本在 `appVersionList` 中按新版在前排列；取 `appVersionList[].id` 作为 `/cloudphone/app/install` 的 `appVersionId`。\n- **分页注意**：结果在取到当页之后才重新排序，所以排序只在页内稳定，`total` 反映的是当前页而不是整个应用市场。分页请用 `pages`。",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "appName": {
                    "description": "应用名称（模糊匹配）",
                    "type": "string"
                  },
                  "pageNum": {
                    "description": "页码；默认：1",
                    "type": "integer"
                  },
                  "pageSize": {
                    "description": "每页条数；默认：10",
                    "type": "integer"
                  }
                }
              },
              "example": {
                "appName": "de",
                "pageNum": 1,
                "pageSize": 10
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功。`data.dataList` 是当前页团队可安装的应用，每个应用的版本在 `appVersionList` 中按新版在前排列。`data.total` 是当前页的记录数，不是总数——分页请用 `data.pages`。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "total": {
                          "type": "string",
                          "description": "当前页的记录数"
                        },
                        "current": {
                          "type": "string",
                          "description": "当前页码"
                        },
                        "pages": {
                          "type": "string",
                          "description": "总页数"
                        },
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "description": "应用 ID。注意它不是 `/cloudphone/app/install` 需要的值。"
                              },
                              "appName": {
                                "type": "string",
                                "description": "应用名称"
                              },
                              "appIcon": {
                                "type": "string",
                                "description": "应用图标 URL"
                              },
                              "packageName": {
                                "type": "string",
                                "description": "Android 包名"
                              },
                              "categoryValue": {
                                "type": "integer",
                                "description": "分类 ID"
                              },
                              "sortNo": {
                                "type": "integer",
                                "description": "应用库排序号"
                              },
                              "appVersionList": {
                                "type": "array",
                                "description": "该应用的版本列表，按 `versionCode` 倒序（新版在前）",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string",
                                      "description": "应用版本 ID。作为 `appVersionId` 传给 `/cloudphone/app/install`。"
                                    },
                                    "versionCode": {
                                      "type": "string",
                                      "description": "版本号"
                                    },
                                    "versionName": {
                                      "type": "string",
                                      "description": "版本名"
                                    },
                                    "installStatus": {
                                      "type": [
                                        "integer",
                                        "null"
                                      ],
                                      "description": "该接口恒为 null。安装状态请查询 `/cloudphone/app/installedList`。"
                                    },
                                    "packageName": {
                                      "type": [
                                        "string",
                                        "null"
                                      ],
                                      "description": "该接口恒为 null；请改用应用层的 `packageName`。"
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "total": "1",
                    "current": "1",
                    "pages": "1",
                    "dataList": [
                      {
                        "id": "1672940217990529",
                        "appName": "Depop",
                        "appIcon": "https://cdn.morelogin.com/app/depop.png",
                        "packageName": "com.depop",
                        "categoryValue": 1,
                        "sortNo": 0,
                        "appVersionList": [
                          {
                            "id": "1672940217990530",
                            "versionCode": "450000000",
                            "versionName": "4.50.0",
                            "installStatus": null,
                            "packageName": null
                          }
                        ]
                      }
                    ]
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/team/app/page": {
      "post": {
        "operationId": "listTeamCloudPhoneAppsLocal",
        "summary": "获取团队应用列表",
        "deprecated": false,
        "description": "列出你团队自有的应用库，含预装应用。\n\n- **副作用**：无。只读。可带退避安全重试。\n- **返回内容**：与 `/cloudphone/app/page` 是不同的数据源——这些是你团队上传的应用，以扁平结构返回（一行一个应用版本），而不是按版本嵌套。每条记录带审核状态；当有更新在进行中时，状态字段描述的是**正在更新的那个版本**，不是当前生效的版本。\n- **说明**：按无法识别的设备服务筛选会返回空页，而不是报错。",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "appName": {
                    "description": "应用名称（模糊匹配）",
                    "type": "string"
                  },
                  "pageNo": {
                    "description": "当前页，默认 1",
                    "type": "integer"
                  },
                  "pageSize": {
                    "description": "每页条数，默认 10",
                    "type": "integer"
                  }
                }
              },
              "example": {
                "appName": "TikTok",
                "pageNo": 1,
                "pageSize": 10
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功。`data.dataList` 是当前页的记录，无匹配结果时为空数组；`data.total`、`data.current`、`data.pages` 描述分页信息。",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponseDataPageResultCloudPhoneAppDto"
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "total": "15",
                    "current": "1",
                    "pages": "2",
                    "dataList": [
                      {
                        "id": "123456",
                        "appName": "Facebook",
                        "packageName": "com.facebook.katana",
                        "versionName": "450.0.0.1",
                        "versionCode": "450000000",
                        "enabled": true,
                        "desc": "Social media application",
                        "enableRoot": false
                      }
                    ]
                  }
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/api/cloudphone/app/installedList": {
      "post": {
        "operationId": "listInstalledCloudPhoneAppsLocal",
        "summary": "查询已安装应用列表",
        "deprecated": false,
        "description": "列出云手机当前已安装的应用。\n\n- **前置条件**：云手机必须属于你的团队。与大多数云手机命令不同，这个接口**不要求**云手机被你占用；但它会实时查询设备服务，所以已关机的云手机通常在设备服务侧失败，而不是返回 MoreLogin 的错误。\n- **副作用**：无。只读。可带退避安全重试。\n- **用途**：`/cloudphone/app/install` 与 `/cloudphone/app/uninstall` 的完成信号。应用名称和图标会用应用市场数据补全；未收录的包名原样返回。",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "description": "云手机ID",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1674550360293464"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功。`data` 是对象数组，元素包含字段 `appName`、`appIcon`、`packageName`、`versionCode`、`versionName`；无数据时返回空数组。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "appName": {
                            "type": "string"
                          },
                          "appIcon": {
                            "type": "string"
                          },
                          "packageName": {
                            "type": "string"
                          },
                          "versionCode": {
                            "type": "string"
                          },
                          "versionName": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    {
                      "appName": "example-name",
                      "appIcon": "string",
                      "packageName": "example-name",
                      "versionCode": "string",
                      "versionName": "example-name"
                    }
                  ],
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/app/start": {
      "post": {
        "operationId": "startCloudPhoneAppLocal",
        "summary": "启动应用程序",
        "deprecated": false,
        "description": "启动云手机上已安装的应用。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用。\n- **完成信号**：响应仅表示命令已到达设备服务，不代表应用已在前台。没有接口能报告应用是否在运行——请用截图或 shell 命令自行确认。\n- **重试**：没有去重，重复调用会再次下发命令。\n\n已记录的业务错误码：`33300`, `33301`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "description": "云手机ID",
                    "type": "string"
                  },
                  "packageName": {
                    "description": "应用包名",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "packageName"
                ]
              },
              "example": {
                "id": "1674550360293464",
                "packageName": "com.depop"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功。该接口的 `data` 恒为 null，结果由 `code` 表达。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "null"
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/app/restart": {
      "post": {
        "operationId": "restartCloudPhoneAppLocal",
        "summary": "重启应用",
        "deprecated": false,
        "description": "重启云手机上的某个应用。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用。**不校验应用是否已安装**——包名不存在时该调用不产生任何效果。\n- **完成信号**：响应仅表示命令已下发到设备服务，不代表应用已重启。请通过 `/cloudphone/app/installedList` 或观察设备确认。",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "云手机ID"
                  },
                  "packageName": {
                    "type": "string",
                    "description": "应用包名"
                  }
                }
              },
              "example": {
                "id": "0",
                "packageName": ""
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功。`data` 是单个布尔值。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码：0 = 成功，>0 = 错误"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "响应消息，如果代码大于 0，则返回错误消息。"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求唯一标识；联系支持时请提供"
                    }
                  },
                  "required": [
                    "msg"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": true,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/app/stop": {
      "post": {
        "operationId": "stopCloudPhoneAppLocal",
        "summary": "停止应用程序",
        "deprecated": false,
        "description": "停止云手机上正在运行的应用。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用。不校验应用是否已安装或正在运行。\n- **完成信号**：响应仅表示命令已下发到设备服务，不代表应用已停止。",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "云手机ID"
                  },
                  "packageName": {
                    "type": "string",
                    "description": "应用包名"
                  }
                }
              },
              "example": {
                "id": "0",
                "packageName": ""
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功。`data` 是单个布尔值。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码：0 = 成功，>0 = 错误"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "消息；如果代码大于 0 则填充。"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求唯一标识；联系支持时请提供"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": true,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/app/uninstall": {
      "post": {
        "operationId": "uninstallCloudPhoneAppLocal",
        "summary": "卸载应用程序",
        "deprecated": false,
        "description": "从云手机卸载应用。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用。\n- **副作用**：下发卸载并更新该云手机的安装记录。\n- **完成信号**：响应仅表示请求已受理。请通过 `/cloudphone/app/installedList` 核实。\n\n已记录的业务错误码：`33300`, `33301`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "云手机ID"
                  },
                  "packageName": {
                    "type": "string",
                    "description": "应用包名"
                  }
                }
              },
              "example": {
                "id": "0",
                "packageName": ""
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功。`data` 是单个布尔值。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码：0 = 成功，>0 = 错误"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "消息；如果代码大于 0 则填充。"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求唯一标识；联系支持时请提供"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": true,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/app/openRoot": {
      "post": {
        "tags": [
          "Apps"
        ],
        "summary": "启用应用 ROOT",
        "description": "为云手机上指定的应用包授予 ROOT。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型支持；不兼容机型调用会成功但无实际效果。\n- **副作用**：把包名白名单下发到设备，并顺带打开 ROOT 总开关。**MoreLogin 不做任何存储**，因此无法通过接口回读该授权。\n- **完成信号**：设备服务同步受理。ROOT 何时在设备上生效由设备服务决定；MoreLogin 不会重启云手机。\n- **说明**：目前没有按单个包名撤销 ROOT 的接口。要关闭请用 `/cloudphone/enableRoot` 关掉总开关。\n\n已记录的业务错误码：`33300`, `33301`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "operationId": "appOpenRoot",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiAppRootOperateDto"
              },
              "example": {
                "id": "12345678",
                "packageNames": [
                  "com.test"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功。`data` 是单个布尔值。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应码：0 = 成功，>0 = 失败"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息；code > 0 时返回"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求唯一标识；联系支持时请提供"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": true,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/api/cloudphone/app/setHideAccessibilityApp": {
      "post": {
        "operationId": "setCloudPhoneAccessibilityAppHiddenLocal",
        "summary": "设置隐藏辅助功能应用",
        "deprecated": false,
        "description": "在一台或多台云手机上，把应用从 Android 无障碍服务列表中隐藏。\n\n- **前置条件**：1 到 100 个云手机 ID，以及 1 到 100 个包名。云手机必须属于你的团队，但**不需要**已开机或被你占用。当所有 ID 都无法解析时，接口返回业务失败而不是抛错。\n- **副作用**：名单下发到设备服务，**MoreLogin 不做存储**，因此无法回读。仅兼容机型 支持；不兼容机型调用成功但无效果。\n- **完成信号**：同步。在部分机型上每个包名是一次独立的设备服务调用，因此包名越多耗时越长，中途失败会让前面的包名保持已生效状态。\n- **机型支持**：文档记载仅 Android 13、Android 14 和 Android 15A 镜像可用。MoreLogin 自身不做版本校验，该限制来自设备能力，包名按原样透传。",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "云手机ID"
                  },
                  "packageName": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "应用程序包名，空字符串相当于清除，而 * 或 ALL 则隐藏所有应用程序。"
                  }
                }
              },
              "example": {
                "ids": [
                  "0"
                ],
                "packageName": [
                  "*"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功。`data` 是单个布尔值。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码：0 = 成功，>0 = 错误"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "消息；如果代码大于 0 则填充。"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求唯一标识；联系支持时请提供"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": true,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/page": {
      "post": {
        "summary": "获取云手机列表",
        "description": "分页列出团队可见的云手机。\n\n- **副作用**：无。只读。可带退避安全重试。\n- **说明**：会返回所有设备类型的云手机。托管代理与动态代理的密码会从响应中移除。\n- **用途**：本接口与 `/cloudphone/info` 是开关机、一键新机和开通这几个异步操作的完成信号。",
        "operationId": "pageUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "bindIp": {
                    "type": "boolean",
                    "description": "IP地址是否绑定：true = 已绑定，false = 未绑定",
                    "example": false
                  },
                  "keyword": {
                    "type": "string",
                    "description": "筛选关键词：代理信息、组名、标签名、环境名",
                    "example": "CP-424"
                  },
                  "pageNo": {
                    "type": "integer",
                    "format": "int64",
                    "description": "当前页面",
                    "example": 1
                  },
                  "pageSize": {
                    "type": "integer",
                    "format": "int64",
                    "description": "每页项目数",
                    "example": 100
                  },
                  "sort": {
                    "type": "array",
                    "description": "动态排序字段。目前云手机仅支持“envName”字段。",
                    "items": {
                      "type": "object",
                      "properties": {
                        "sortDirection": {
                          "type": "string",
                          "enum": [
                            "asc",
                            "desc"
                          ],
                          "description": "排序方向",
                          "example": "asc"
                        },
                        "sortField": {
                          "type": "string",
                          "description": "排序依据字段（目前仅支持“envName”）",
                          "example": "envName"
                        }
                      },
                      "required": [
                        "sortDirection",
                        "sortField"
                      ]
                    },
                    "example": [
                      {
                        "sortDirection": "asc",
                        "sortField": "envName"
                      }
                    ]
                  }
                },
                "example": {
                  "bindIp": false,
                  "keyword": "CP-424",
                  "pageNo": 1,
                  "pageSize": 100,
                  "sort": [
                    {
                      "sortDirection": "asc",
                      "sortField": "envName"
                    }
                  ]
                }
              },
              "example": {
                "bindIp": false,
                "keyword": "CP-424",
                "pageNo": 1,
                "pageSize": 100,
                "sort": [
                  {
                    "sortDirection": "asc",
                    "sortField": "envName"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "返回结果代码 0：正常；其他代码均为例外情况。"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "current": {
                          "type": "string"
                        },
                        "dataList": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/CloudPhoneProfile"
                          }
                        },
                        "pages": {
                          "type": "string"
                        },
                        "total": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    },
                    "requestId": {
                      "type": "string",
                      "description": "操作请求 ID"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "current": "1",
                    "dataList": [
                      {
                        "abnormalStatus": 1,
                        "adbInfo": {
                          "adbIp": "string",
                          "adbPassword": "string",
                          "adbPort": "9222",
                          "command": "string",
                          "expireTime": "2026-09-01 12:00:00",
                          "remark": "example remark",
                          "success": 1
                        },
                        "billingType": 1,
                        "createDate": "2026-09-01 12:00:00",
                        "createMember": 1,
                        "createMemberName": "example-name",
                        "enableAdb": true,
                        "envName": "example-name",
                        "envRemark": "example remark",
                        "envStatus": 1,
                        "expireTime": "2026-09-01 12:00:00",
                        "groupId": "1673823102599682",
                        "groupName": "example-name",
                        "id": "1673823102599682",
                        "androidId": "1673823102599682",
                        "gaid": "1673823102599682",
                        "lastConnectDate": "2026-09-01 12:00:00",
                        "lastConnectMemberId": "1673823102599682",
                        "lastConnectMemberName": "example-name",
                        "lastStartDate": "2026-09-01 12:00:00",
                        "lastStartMemberId": "1673823102599682",
                        "lastStartMemberName": "example-name",
                        "proxy": {
                          "country": "string",
                          "countryCode": "string",
                          "createDate": "2026-09-01 12:00:00",
                          "delFlag": 1,
                          "expiryTime": "2026-09-01 12:00:00",
                          "exportIp": "9222",
                          "groupId": "1673823102599682",
                          "id": "1673823102599682",
                          "providerCode": "string",
                          "proxyAreaCode": "string",
                          "proxyCatagoryType": 1,
                          "proxyCheckStatus": 1,
                          "proxyInfo": "string",
                          "proxyIp": "string",
                          "proxyName": "example-name",
                          "proxyPort": 1,
                          "proxyRegionCode": "string",
                          "proxyStatus": 1,
                          "proxySub": {
                            "activeRecordId": "1673823102599682",
                            "businessId": "1673823102599682",
                            "createMember": 1,
                            "endTime": "2026-09-01 12:00:00",
                            "id": "1673823102599682",
                            "nextBillingTime": "2026-09-01 12:00:00",
                            "startTime": "2026-09-01 12:00:00",
                            "subPayMethod": "string",
                            "subStatus": 1,
                            "subType": 1,
                            "teamId": "1673823102599682"
                          },
                          "proxyType": 1,
                          "proxyTypeCode": "string",
                          "regionKey": "string",
                          "releaseTime": "2026-09-01 12:00:00",
                          "uniqueId": 1
                        },
                        "proxyStatus": 1,
                        "supportAdb": true,
                        "tagInfos": [
                          {
                            "id": "1673823102599682",
                            "tagName": "example-name"
                          }
                        ],
                        "updateDate": "2026-09-01 12:00:00",
                        "updateMember": 1
                      }
                    ],
                    "pages": "1",
                    "total": "1"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/create": {
      "post": {
        "summary": "创建云手机",
        "description": "购买并开通一台或多台云手机。\n\n- **前置条件**：套餐必须有剩余额度，且当日创建配额未用尽。`country`、`timezone`、`language` 会按所选机型支持的列表校验，不支持的组合会被拒绝而不是被静默调整。经度限 ±180、纬度限 ±90。所选 SKU 不支持手机号时，传入的手机号会被丢弃。包月 SKU 可通过 API 创建，但必须是 [`/api/cloudphone/monthly/skus`](./local-api.yaml#operation/listMonthlyCloudPhoneSkus) 返回的商品；当前周期为 30 天。\n- **副作用**：创建云手机记录。按量计费的 SKU 完成开通后可用；包月 SKU 创建后处于未激活状态。创建操作本身不扣费；包月云手机仅在调用 [`/api/cloudphone/monthly/activate`](./local-api.yaml#operation/activateMonthlyCloudPhones) 时扣费，按量云手机则在开机后开始消耗余额或额度。\n- **完成信号**：**已受理，未完成。** 此时云手机实例尚未就绪，过早开机会被拒绝。请轮询 [`/api/cloudphone/info`](./local-api.yaml#operation/infoUsingPOST) 或 [`/api/cloudphone/page`](./local-api.yaml#operation/pageUsingPOST) 直到 `envStatus` 变为已关机。对于包月 SKU，还必须先完成 [`/api/cloudphone/monthly/activate`](./local-api.yaml#operation/activateMonthlyCloudPhones) 才能开机。\n- **重试**：不幂等，且没有串行化。没有幂等键。超时后不要盲目重试，先查询状态。\n\n已记录的业务错误码：`19064`, `20018`, `33338`, `33339`, `33340`, `33341`, `33342`, `33343`, `33344`, `33345`, `33398`, `33399`, `33400`, `33408`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "operationId": "createUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "skuId": {
                    "type": "string",
                    "description": "云手机机型\nskuId:10002 model:Android 12\nskuId:10013 model:Android 13\nskuId:10005 model:Android 14\nskuId:10004 model:Android 15\nskuId:10014 model:Android 15A\nskuId:10015 model:Android 16\n支持的地区与时区映射见[国家与时区对照表](/api-reference/appendix/country-time-zone)\n"
                  },
                  "quantity": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 10,
                    "description": "创建的云手机数量。取值范围：[1-10]"
                  },
                  "envRemark": {
                    "type": "string",
                    "maxLength": 1500,
                    "description": "备注（长度上限 1500 字符）"
                  },
                  "groupId": {
                    "type": "string",
                    "description": "分组 ID。未分组填 `\"0\"`。"
                  },
                  "groupName": {
                    "type": "string",
                    "maxLength": 50,
                    "description": "已有分组名称；若没有匹配的分组，则按该名称新建。"
                  },
                  "automaticGeo": {
                    "type": "boolean",
                    "description": "是否自动匹配地理位置。默认：true"
                  },
                  "automaticLanguage": {
                    "type": "boolean",
                    "description": "是否自动匹配语言。默认：true"
                  },
                  "automaticLocation": {
                    "type": "boolean",
                    "description": "是否自动匹配位置（时区、国家）。默认：true"
                  },
                  "country": {
                    "type": "string",
                    "description": "国家代码（例如 `us`）。完整清单见[国家与时区对照表](/api-reference/appendix/country-time-zone)"
                  },
                  "timezone": {
                    "type": "string",
                    "description": "时区，例如 America/New_York"
                  },
                  "language": {
                    "type": "string",
                    "description": "语言，例如 en-US"
                  },
                  "altitude": {
                    "type": "number",
                    "description": "海拔"
                  },
                  "latitude": {
                    "type": "number",
                    "description": "纬度。示例：22.309182"
                  },
                  "longitude": {
                    "type": "number",
                    "description": "经度。示例：114.176817"
                  },
                  "speed": {
                    "type": "number",
                    "maximum": 400,
                    "description": "移动速度"
                  },
                  "bearing": {
                    "type": "number",
                    "maximum": 360,
                    "description": "移动方向"
                  },
                  "accuracy": {
                    "type": "number",
                    "maximum": 100,
                    "description": "水平精度"
                  },
                  "phoneNumber": {
                    "type": "string",
                    "description": "自定义手机号。格式要求：必须以 + 号开头，国家代码为 1-3 位数字（不含 86），总长度 8-14 位，且只能包含 + 与数字。"
                  },
                  "brand": {
                    "type": "string",
                    "description": "设备品牌，可通过 https://guide.morelogin.com/api-reference/open-api/open-api/cloud-phone/paths/~1cloudphone~1brand~1models/post 接口查询。"
                  },
                  "modelId": {
                    "type": "number",
                    "description": "设备型号 ID，可通过 https://guide.morelogin.com/api-reference/open-api/open-api/cloud-phone/paths/~1cloudphone~1brand~1models/post 接口查询。"
                  },
                  "proxyId": {
                    "type": "string",
                    "description": "代理 ID"
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "标签名称。空值会被忽略。"
                  }
                },
                "required": [
                  "skuId",
                  "quantity"
                ]
              },
              "example": {
                "skuId": "1661515884160372",
                "quantity": 1
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "这是云手机IDS"
                    },
                    "requestId": {
                      "type": "string"
                    },
                    "error": {
                      "type": "object",
                      "properties": {}
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    "string"
                  ],
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "error": {}
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/powerOn": {
      "post": {
        "summary": "启动云手机",
        "description": "启动云手机。\n\n- **前置条件**：云手机当前必须处于已关机状态。以下情况会被拒绝：SKU 已下架或处于维护、云手机被其他成员占用、代理仍在检测中、账户欠费或云手机已停用、包月已到期，以及免费时长、并发额度、正余额三者都不可用。部分机型还要求使用最新版 Windows 客户端。\n- **副作用**：把云手机标记为启动中、占用给调用成员，并预留一个并发额度或开始消耗时长。响应会说明用的是哪一种。\n- **完成信号**：**已受理，未完成。** 请轮询 `/cloudphone/info` 直到 `envStatus` 为已开机；失败时会在那里以 `errorCode` 和 `errorMsg` 呈现。配置了回调地址的成员还会收到 webhook。\n- **重试**：并发的第二次调用会被直接拒绝而不是排队。超时后请读 `/cloudphone/info`，不要重发。\n\n已记录的业务错误码：`33300`, `33309`, `33315`, `33316`, `33317`, `33318`, `33321`, `33322`, `33323`, `33324`, `33325`, `33346`, `33347`, `33367`, `33376`, `33407`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "operationId": "powerOnUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "headless": {
                    "type": "boolean",
                    "description": "显示云手机窗口。false：显示，true：不显示，默认值：true"
                  },
                  "disableMoneySavingMode": {
                    "type": "boolean",
                    "description": "禁用省电模式，默认值：false"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1637226321190925"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "返回结果代码 0：正常；其他代码均为例外情况。"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "操作请求 ID"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/powerOff": {
      "post": {
        "summary": "关闭云手机",
        "description": "关闭云手机。\n\n- **前置条件**：云手机必须处于启动中或已开机。被其他成员占用时，或正在一键新机、重启、重置时，无法关机。\n- **副作用**：停止计费、释放并发额度、结算用量，并让本次会话签发的连接凭据失效。对仍在启动中的云手机执行关机，会改为中断启动。\n- **完成信号**：计费与本地状态在同步事务内结算完成；设备关机随后进行，请用 `/cloudphone/info` 确认。\n- **重试**：第二次调用会报云手机未运行。批量遇到第一个失败即中止，重试前请重新读取状态。\n\n已记录的业务错误码：`33300`, `33301`, `33308`, `33331`, `33332`, `33333`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "operationId": "powerOffUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1596527092376632"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "返回结果代码 0：正常；其他代码均为例外情况。"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "操作请求 ID"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/edit/batch": {
      "post": {
        "summary": "修改云手机",
        "description": "更新一台或多台云手机的配置。\n\n- **前置条件**：云手机必须属于你的团队。地区、语言和坐标会按机型校验，规则与创建时一致。把云手机移入你没有权限的分组会被拒绝。\n- **副作用**：覆盖云手机设置并刷新 GPS 配置；可能创建标签绑定。不扣费，不影响并发额度。\n- **完成信号**：同步，相同请求体幂等。",
        "operationId": "editBatchUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "云手机 ID 列表"
                  },
                  "envName": {
                    "type": "string",
                    "maxLength": 64,
                    "minLength": 1,
                    "description": "云手机名称（不超过 64 字符）"
                  },
                  "phoneNumber": {
                    "type": "string",
                    "description": "自定义手机号。格式要求：必须以 + 号开头，国家代码为 1-3 位数字（不含 86），总长度 8-14 位，且只能包含 + 与数字。"
                  },
                  "powerOnBillingStrategy": {
                    "type": "integer",
                    "enum": [
                      0,
                      1
                    ],
                    "description": "非月付云手机的计费方式（0：默认，1：仅并行包）"
                  },
                  "proxyId": {
                    "type": "string",
                    "description": "代理 ID"
                  },
                  "groupId": {
                    "type": "string",
                    "description": "环境分组 ID"
                  },
                  "groupName": {
                    "type": "string",
                    "maxLength": 50,
                    "description": "已有分组名称；若没有匹配的分组，则按该名称新建。"
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "替换后的标签名称。空值会被忽略。"
                  },
                  "envRemark": {
                    "type": "string",
                    "maxLength": 1500,
                    "description": "环境备注（不超过 1500 字符，支持换行）"
                  },
                  "automaticGeo": {
                    "type": "boolean",
                    "description": "自动匹配地理位置"
                  },
                  "automaticLanguage": {
                    "type": "boolean",
                    "description": "自动匹配语言"
                  },
                  "automaticLocation": {
                    "type": "boolean",
                    "description": "自动匹配位置（时区与国家）"
                  },
                  "country": {
                    "type": "string",
                    "description": "国家"
                  },
                  "timezone": {
                    "type": "string",
                    "description": "时区"
                  },
                  "language": {
                    "type": "string",
                    "description": "语言"
                  },
                  "latitude": {
                    "type": "number",
                    "description": "纬度"
                  },
                  "longitude": {
                    "type": "number",
                    "description": "经度"
                  },
                  "enableRoot": {
                    "type": "boolean",
                    "description": "开启全局 ROOT"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": [
                  "1637238770951311"
                ],
                "proxyId": "0",
                "automaticGeo": false,
                "automaticLanguage": false,
                "automaticLocation": false,
                "country": "bo",
                "timezone": "America/La_Paz",
                "language": "de-CH",
                "latitude": 0,
                "longitude": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "返回结果代码：0，正常；其他代码为例外情况。"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "操作请求 ID"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/setProxy": {
      "post": {
        "tags": [
          "Cloud Phone Management"
        ],
        "summary": "设置云手机代理",
        "description": "为一台或多台云手机绑定代理。\n\n- **前置条件**：`ids` 与 `uniqueIds` 至少提供一个。云手机必须属于你的团队，**不需要**已开机。传入的 `proxyId` 必须存在，否则调用被拒绝。\n- **副作用**：当 `proxyId` 省略或为 `0` 时，会复用连接信息完全相同的已有代理；**若没有匹配项，则在你的团队中新建一条代理记录**。代理检测状态会被重置，上一个代理会被记录下来。\n- **完成信号**：同步。**已开机的云手机会立即收到新代理——不需要重启**；已关机的在下次启动时生效。\n- **重试**：重新绑定已有 `proxyId` 是幂等的；但如果请求里带的是原始连接信息，每次去重未命中都可能再新建一条代理记录。\n\n已记录的业务错误码：`33300`, `33303`, `33320`, `14023`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "operationId": "setProxy",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneSetProxyApiDto"
              },
              "example": {
                "ids": [
                  "1558968155668507"
                ],
                "uniqueIds": [
                  1001
                ],
                "proxy": {
                  "proxyIp": "192.168.1.100",
                  "proxyPort": 8080,
                  "proxyProvider": 2
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功。该接口的 `data` 恒为 null，结果由 `code` 表达。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应码：0 = 成功，>0 = 失败"
                    },
                    "data": {
                      "type": "null"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息；code > 0 时返回"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求唯一标识；联系支持时请提供"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": null,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/delete/batch": {
      "post": {
        "summary": "删除云手机",
        "description": "释放一台或多台云手机。\n\n- **前置条件**：云手机不能处于转移中，且团队对它们没有未支付订单。云手机不需要先关机。\n- **副作用**：云手机实例立即释放。从未激活的云手机会被直接删除；已激活的会保留为已停用记录，因此仍会出现在列表里并带有停用状态。\n- **完成信号**：同步。\n- **重试**：云手机逐台处理，遇到第一个失败即中止，因此批量可能部分生效。重试前请重新读取 `/cloudphone/page`，只重试仍处于活动状态的云手机。",
        "operationId": "deleteUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "ids"
                ]
              },
              "example": {
                "ids": [
                  "1595755686723985"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "返回结果代码 0：正常；其他代码均为例外情况。"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "操作请求 ID"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/newMachine": {
      "post": {
        "summary": "一键式全新云手机",
        "description": "原地更换云手机的设备标识（一键新机）。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用。传入的品牌与机型必须是该云手机 SKU 支持的。**本操作会消耗当日云手机创建配额**，与 `/cloudphone/create` 用的是同一个配额。\n- **副作用**：向设备下发新的品牌与机型、清空该机的已安装应用记录、重置手机号、并中止正在运行的 AI 任务。具体重新生成的标识范围取决于设备类型。\n- **完成信号**：**已受理，未完成。** 云手机进入一键新机状态；请轮询 `/cloudphone/info` 直到它离开该状态。\n- **并发**：进行期间，开机、关机以及所有需要云手机运行的命令都会被拒绝。并发的第二次调用会被拒绝而不是排队。\n\n已记录的业务错误码：`33300`, `33301`, `33326`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "operationId": "oneNewUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "云手机ID"
                  },
                  "brand": {
                    "type": "string",
                    "description": "品牌"
                  },
                  "modelId": {
                    "type": "integer",
                    "description": "型号 ID"
                  }
                }
              },
              "example": {
                "id": "1595372958075305"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码：0 表示成功，大于 0 表示失败"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求唯一标识；联系支持时请提供"
                    }
                  },
                  "required": [
                    "code",
                    "msg"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/info": {
      "post": {
        "summary": "云手机详情",
        "description": "返回单台云手机的完整详情，含分组名与标签名。\n\n- **副作用**：无。只读。可带退避安全重试。\n- **用途**：异步操作的主要状态查询接口。`envStatus` 区分新建、创建失败、已关机、启动中、已开机、重置中、重启中、一键新机中；异步操作失败时，原因由 `errorCode` 与 `errorMsg` 给出。",
        "operationId": "infoUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "云手机ID"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1672532391231745"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "example": 0
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "example": null
                    },
                    "data": {
                      "$ref": "#/components/schemas/CloudPhoneDetail"
                    },
                    "requestId": {
                      "type": "string",
                      "example": "4d0f4fa68613441e9a11446a6437bb5a"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "id": "1673823102599682",
                    "androidId": "1673823102599682",
                    "gaid": "1673823102599682",
                    "envName": "example-name",
                    "groupId": "1673823102599682",
                    "groupName": "example-name",
                    "skuId": "1673823102599682",
                    "tagInfos": [
                      {
                        "id": "1673823102599682",
                        "tagName": "example-name"
                      }
                    ],
                    "billingType": 1,
                    "proxyStatus": 1,
                    "settings": {
                      "automaticGeo": true,
                      "automaticLocation": true,
                      "automaticLanguage": true,
                      "longitude": 1,
                      "latitude": 1
                    },
                    "device": {
                      "server": "string",
                      "countryName": "example-name",
                      "rom": 1,
                      "wifiBssid": "1673823102599682",
                      "bluetoothMac": "string"
                    },
                    "proxy": {
                      "id": "1673823102599682",
                      "proxyName": "example-name",
                      "proxyIp": "string"
                    },
                    "lastStartMemberId": "1673823102599682",
                    "lastStartMemberName": "example-name",
                    "lastStartDate": "2026-09-01 12:00:00",
                    "lastConnectMemberId": "1673823102599682",
                    "lastConnectMemberName": "example-name",
                    "lastConnectDate": "2026-09-01 12:00:00",
                    "envStatus": 1,
                    "abnormalStatus": 1,
                    "expireTime": "2026-09-01 12:00:00",
                    "envRemark": "example remark",
                    "createMember": "string",
                    "updateMember": "2026-09-01 12:00:00",
                    "updateDate": "2026-09-01 12:00:00",
                    "createDate": "2026-09-01 12:00:00",
                    "createMemberName": "example-name"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/queryByAndroidId": {
      "post": {
        "summary": "通过 AndroidId 获取云手机详情",
        "description": "通过设备上报的 Android ID 查找云手机。\n\n- **副作用**：无。只读。可带退避安全重试。 云手机不需要已开机。\n- **返回**：与 `/cloudphone/info` 相同的详情结构。\n- **边界情况**：`androidId` 为空时返回成功但 `data` 为 null，而不是参数校验错误；若多台云手机共用同一个 Android ID，则任意返回其中一台。",
        "operationId": "queryByAndroidId",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "androidId": {
                    "type": "string",
                    "description": "云手机的 androidId",
                    "example": "8f7e6d5c4b3a2f1e"
                  }
                },
                "required": [
                  "androidId"
                ]
              },
              "example": {
                "androidId": "8f7e6d5c4b3a2f1e"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "example": 0
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "example": null
                    },
                    "data": {
                      "$ref": "#/components/schemas/CloudPhoneDetail"
                    },
                    "requestId": {
                      "type": "string",
                      "example": "4d0f4fa68613441e9a11446a6437bb5a"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "id": "1673823102599682",
                    "androidId": "1673823102599682",
                    "gaid": "1673823102599682",
                    "envName": "example-name",
                    "groupId": "1673823102599682",
                    "groupName": "example-name",
                    "skuId": "1673823102599682",
                    "tagInfos": [
                      {
                        "id": "1673823102599682",
                        "tagName": "example-name"
                      }
                    ],
                    "billingType": 1,
                    "proxyStatus": 1,
                    "settings": {
                      "automaticGeo": true,
                      "automaticLocation": true,
                      "automaticLanguage": true,
                      "longitude": 1,
                      "latitude": 1
                    },
                    "device": {
                      "server": "string",
                      "countryName": "example-name",
                      "rom": 1,
                      "wifiBssid": "1673823102599682",
                      "bluetoothMac": "string"
                    },
                    "proxy": {
                      "id": "1673823102599682",
                      "proxyName": "example-name",
                      "proxyIp": "string"
                    },
                    "lastStartMemberId": "1673823102599682",
                    "lastStartMemberName": "example-name",
                    "lastStartDate": "2026-09-01 12:00:00",
                    "lastConnectMemberId": "1673823102599682",
                    "lastConnectMemberName": "example-name",
                    "lastConnectDate": "2026-09-01 12:00:00",
                    "envStatus": 1,
                    "abnormalStatus": 1,
                    "expireTime": "2026-09-01 12:00:00",
                    "envRemark": "example remark",
                    "createMember": "string",
                    "updateMember": "2026-09-01 12:00:00",
                    "updateDate": "2026-09-01 12:00:00",
                    "createDate": "2026-09-01 12:00:00",
                    "createMemberName": "example-name"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/enableRoot": {
      "post": {
        "tags": [
          "Cloud Phone Management"
        ],
        "summary": "开启或关闭全局 ROOT",
        "description": "打开或关闭云手机的全局 ROOT 开关。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型支持；不兼容机型调用成功但无效果。\n- **副作用**：与 `/cloudphone/app/openRoot` 不同，这个设置**会被持久化**到云手机的设置记录，然后作为设备级开关下发给设备服务。\n- **完成信号**：同步。MoreLogin 不会重启云手机；变更何时在设备上生效由设备服务决定。\n- **重试**：幂等。\n\n已记录的业务错误码：`33300`, `33301`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "operationId": "enableRoot",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneEnableRootApiDTO"
              },
              "example": {
                "id": "1558968155668507",
                "enableRoot": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功。该接口的 `data` 恒为 null，结果由 `code` 表达。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应码：0 = 成功，>0 = 失败"
                    },
                    "data": {
                      "type": "null"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息；code > 0 时返回"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求唯一标识；联系支持时请提供"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": null,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/screenCap": {
      "post": {
        "tags": [
          "Cloud Phone Management"
        ],
        "summary": "云手机截屏",
        "description": "截取云手机屏幕并返回下载地址。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型支持，不兼容机型会拒绝该调用。\n- **副作用**：在部分机型上，截图文件在拍摄后会从设备中删除。\n- **完成信号**：同步。响应包含临时图片下载地址。\n- **注意**：在部分机型上返回的过期时间是响应时刻起固定一小时、`success` 恒为 true——它不是真实的签名有效期。请及时下载，不要存这个 URL。\n- **重试**：除截图本身外没有副作用，可以安全重复调用。",
        "operationId": "screenCap",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "云手机 ID",
                    "example": "1558968155668507"
                  }
                }
              },
              "example": {
                "id": "1558968155668507"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功。`data` 是对象，包含字段 `url`、`status`、`expireAt`、`success`。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应码：0 = 成功，>0 = 失败"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "url": {
                          "type": "string",
                          "description": "截图访问地址",
                          "example": "http://oss.morelogin.com/test.png"
                        },
                        "status": {
                          "type": "string",
                          "description": "表示立即完成（\"finish\"）或处理中（\"pending\"）的状态",
                          "example": "finish"
                        },
                        "expireAt": {
                          "type": "string",
                          "description": "URL 过期时间戳，单位毫秒（仅部分机型返回）",
                          "example": "1756024767163"
                        },
                        "success": {
                          "type": "boolean",
                          "description": "是否生成成功",
                          "example": true
                        }
                      }
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息；code > 0 时返回"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求唯一标识；联系支持时请提供"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": {
                    "url": "http://oss.morelogin.com/test.png",
                    "status": "finish",
                    "expireAt": "1756024767163",
                    "success": true
                  },
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/screenCapBase64": {
      "post": {
        "tags": [
          "Cloud Phone Management"
        ],
        "summary": "云手机截屏（返回base64）",
        "description": "截取云手机屏幕并以 base64 内联返回图片。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用。**仅兼容机型支持**——不兼容机型都会拒绝该调用。\n- **完成信号**：同步。失败时响应携带错误信息而不是图片数据，所以解码前请先检查 `success`。\n- **机型支持**：文档记载仅 Android 12 与 Android 15 镜像可用。\n- **用途**：当你不想依赖设备服务托管的 URL 时，优先用本接口而不是 `/cloudphone/screenCap`。",
        "operationId": "screenCapBase64",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "云手机ID",
                    "example": "1558968155668507"
                  }
                }
              },
              "example": {
                "id": "1558968155668507"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功。`data` 是对象，包含字段 `captureBase64`、`errorMessage`、`success`。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码：0 = 成功，>0 = 错误"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "captureBase64": {
                          "type": "string",
                          "description": "Base64编码的图片",
                          "example": "data:image/png;base64,/9j/4AAQSkZJRgABAQAA....."
                        },
                        "errorMessage": {
                          "type": "string",
                          "description": "错误信息",
                          "example": "success"
                        },
                        "success": {
                          "type": "boolean",
                          "description": "是否成功生成",
                          "example": true
                        }
                      }
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "消息；代码 > 0 时填充"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求唯一标识；联系支持时请提供"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": {
                    "captureBase64": "data:image/png;base64,/9j/4AAQSkZJRgABAQAA.....",
                    "errorMessage": "success",
                    "success": true
                  },
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/brand/models": {
      "post": {
        "operationId": "listCloudPhoneBrandsAndModelsLocal",
        "summary": "查询品牌和型号列表",
        "description": "列出某个云手机 SKU 支持的设备品牌与机型。\n\n- **副作用**：无。只读。可带退避安全重试。 不涉及具体云手机。\n- **用途**：在调用 `/cloudphone/create` 或 `/cloudphone/newMachine` 之前选一个合法的 `brand` 与 `modelId`——这两个接口都会拒绝本接口未返回的组合。\n- **说明**：未知的 `skuId` 返回空列表而不是报错。",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "skuId": {
                    "type": "string",
                    "description": "云手机产品 ID"
                  }
                },
                "required": [
                  "skuId"
                ]
              },
              "example": {
                "skuId": "10002"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    },
                    "timestamp": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "brand": {
                            "type": "string"
                          },
                          "model": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "timestamp": 1,
                  "data": [
                    {
                      "brand": "string",
                      "model": "string"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/updateAdb": {
      "post": {
        "summary": "更新云手机 ADB 状态",
        "description": "打开或关闭一台或多台云手机的 ADB 访问。\n\n- **前置条件**：只考虑 SKU 支持 ADB 的云手机；若传入的云手机都不符合，调用被拒绝。从未分配过实例的云手机会被跳过。\n- **副作用**：向设备服务设置 ADB 开关，并把设备服务接受的那些云手机持久化。\n- **部分失败**：如果一部分成功、一部分失败，**接口仍然报错**。请把失败理解为「可能有些云手机已经被改动」，并重新读取状态。\n- **完成信号**：同步。连接信息用 `/cloudphone/batchAdbInfo` 读取，它只返回已开机且支持 ADB 的云手机数据。\n\n已记录的业务错误码：`33350`, `33401`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "operationId": "updateAdbUsingPOST",
        "tags": [
          "ADB"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "enableAdb": {
                    "type": "boolean"
                  },
                  "ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "enableAdb",
                  "ids"
                ]
              },
              "example": {
                "enableAdb": true,
                "ids": [
                  "1633612946805630"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "返回结果代码 0：正常；其他代码均为例外情况。"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "操作请求 ID"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/batchAdbInfo": {
      "post": {
        "tags": [
          "ADB"
        ],
        "summary": "批量查询 ADB 信息",
        "description": "批量获取最多 200 台云手机的 ADB 连接信息。\n\n- **前置条件**：云手机必须属于你的团队，**不需要**被你占用。只有已开机且 SKU 支持 ADB 的云手机才会去取连接信息。\n- **副作用**：无。只读。可带退避安全重试。\n- **部分结果**：结果与请求的 ID 一一对应，**整体永不失败**。取不到信息时 `remark` 会说明原因——云手机不存在、未开机、不支持 ADB，或设备服务查询失败。把空值当成错误之前请先读 `remark`。\n- **批量范围**：一次请求可以包含不同机型的云手机，结果会统一返回。\n- **说明**：请先用 `/cloudphone/updateAdb` 打开 ADB。",
        "operationId": "batchAdbInfo",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiBatchAdbInfoDto"
              },
              "example": {
                "envIds": [
                  "1674380838117474",
                  "1675787900043353"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponseDataListApiBatchAdbInfoResultDto"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": [
                    {
                      "id": "1674380838117474",
                      "supportAdb": true,
                      "envStatus": 4,
                      "adbIp": "192.168.1.100",
                      "adbPassword": "abc12345",
                      "adbPort": "5555",
                      "command": null,
                      "expireTime": null,
                      "remark": null
                    },
                    {
                      "id": "1675787900043353",
                      "supportAdb": true,
                      "envStatus": 4,
                      "adbIp": "10.0.0.50",
                      "adbPassword": "xyz78900",
                      "adbPort": "22",
                      "command": "ssh -L 5555:localhost:5555 user@10.0.0.50 -p 22",
                      "expireTime": "2026-05-23 12:00:00",
                      "remark": null
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/exeCommand": {
      "post": {
        "summary": "执行 shell 命令",
        "description": "在云手机上执行 shell 命令并返回输出。\n\n- **前置条件**：云手机必须已开机且未被其他成员占用。\n- **副作用**：完全取决于命令本身。MoreLogin 不做任何存储，也**没有命令白名单、没有长度限制**；命令以什么权限运行由设备服务决定。如果命令需要 root，请单独开启全局 ROOT。\n- **完成信号**：同步——`data` 就是命令输出，不是任务 ID。\n- **重试**：没有执行记录可查，所以超时后结果未知。只重试你确知可以执行两次的命令。\n\n已记录的业务错误码：`33300`, `33301`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "operationId": "executeShellCommand",
        "tags": [
          "ADB"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "云手机 ID"
                  },
                  "command": {
                    "type": "string",
                    "description": "要执行的 shell 命令"
                  }
                },
                "required": [
                  "id",
                  "command"
                ]
              },
              "example": {
                "command": "am start -n com.android.chrome/com.google.android.apps.chrome.Main",
                "id": "1674153897828425"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "成功",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码：0 表示成功，大于 0 表示失败"
                    },
                    "data": {
                      "type": "string",
                      "description": "回复信息"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "响应消息：当代码大于 0 时，将返回错误消息。"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求唯一标识；联系支持时请提供"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg"
                  ]
                },
                "example": {
                  "code": 0,
                  "data": "string",
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/rpa/template/market/page": {
      "post": {
        "operationId": "listMarketplaceRpaTemplatesLocal",
        "summary": "获取市场模板页面",
        "deprecated": false,
        "description": "列出公共模板市场中的 RPA 模板。\n\n- **副作用**：无。只读。可带退避安全重试。 模板是全局的，不按团队隔离。\n- **本地化**：标题和描述按请求语言返回。\n- **用途**：`parameter` 是描述模板变量的 JSON 字符串，也是你创建计划时 `templateParameter` 必须遵循的结构。模板未声明变量时它为 null。",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "searchKey": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "模板名称"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "默认值：1"
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "默认值：10"
                  }
                }
              },
              "example": {
                "searchKey": null,
                "pageNo": null,
                "pageSize": null
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "成功。`data.dataList` 是当前页的记录，无匹配结果时为空数组；`data.total`、`data.current`、`data.pages` 描述分页信息。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码，0 表示成功，大于 0 表示失败"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求跟踪 ID"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string",
                                "description": "市场模板标题"
                              },
                              "parameter": {
                                "type": "string",
                                "description": "模板参数 JSON 字符串"
                              },
                              "description": {
                                "type": "string",
                                "description": "市场模板描述"
                              },
                              "appIconUrls": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "sort": {
                                "type": "integer",
                                "description": "排序序号"
                              },
                              "author": {
                                "type": "string",
                                "description": "作者"
                              },
                              "updateDate": {
                                "type": "string",
                                "description": "最后更新时间"
                              }
                            },
                            "required": [
                              "parameter"
                            ]
                          }
                        },
                        "current": {
                          "type": "string",
                          "description": "当前页码"
                        },
                        "pages": {
                          "type": "string",
                          "description": "总页数"
                        },
                        "total": {
                          "type": "string",
                          "description": "总数"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "title": "example-title",
                        "parameter": "{\"key\":\"value\"}",
                        "description": "example description",
                        "appIconUrls": [
                          "https://example.com/resource"
                        ],
                        "sort": 1,
                        "author": "example-author",
                        "updateDate": "2026-09-01 12:00:00"
                      }
                    ],
                    "current": "1",
                    "pages": "1",
                    "total": "1"
                  }
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/rpa/template/personal/page": {
      "post": {
        "operationId": "listPersonalRpaTemplatesLocal",
        "summary": "获取个人模板页面",
        "deprecated": false,
        "description": "列出你团队自建的 RPA 模板。\n\n- **副作用**：无。只读。可带退避安全重试。\n- **返回内容**：与模板市场是不同的库，按团队隔离，标题是单语言纯文本。\n- **优先级**：同一个模板 ID 在两个库都存在时，创建计划会解析到你团队自己的模板。\n- **用途**：`parameter` 描述模板变量，与市场模板一致。",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "searchKey": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "模板名称"
                  },
                  "desc": {
                    "type": "string",
                    "description": "模板描述"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "默认值：1"
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "默认值：10"
                  }
                }
              },
              "example": {
                "searchKey": null,
                "desc": "string",
                "pageNo": null
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "成功。`data.dataList` 是当前页的记录，无匹配结果时为空数组；`data.total`、`data.current`、`data.pages` 描述分页信息。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码，0 表示成功，大于 0 表示失败"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求跟踪 ID"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string",
                                "description": "市场模板标题"
                              },
                              "parameter": {
                                "type": "string",
                                "description": "模板参数 JSON 字符串"
                              },
                              "description": {
                                "type": "string",
                                "description": "市场模板描述"
                              },
                              "appIconUrls": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "sort": {
                                "type": "integer",
                                "description": "排序序号"
                              },
                              "updateDate": {
                                "type": "string",
                                "description": "最后更新时间"
                              }
                            }
                          }
                        },
                        "current": {
                          "type": "string",
                          "description": "当前页码"
                        },
                        "pages": {
                          "type": "string",
                          "description": "总页数"
                        },
                        "total": {
                          "type": "string",
                          "description": "总数"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "title": "example-title",
                        "parameter": "{\"key\":\"value\"}",
                        "description": "example description",
                        "appIconUrls": [
                          "https://example.com/resource"
                        ],
                        "sort": 1,
                        "updateDate": "2026-09-01 12:00:00"
                      }
                    ],
                    "current": "1",
                    "pages": "1",
                    "total": "1"
                  }
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/rpa/task/page": {
      "post": {
        "operationId": "listCloudPhoneRpaTasksLocal",
        "summary": "获取计划任务列表",
        "deprecated": false,
        "description": "分页列出团队的 RPA 计划。\n\n- **副作用**：无。只读。可带退避安全重试。\n- **用途**：每个计划上的 `taskState` 是 `/cloudphone/rpa/task/cancel` 的完成信号。",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": [
                      "boolean",
                      "null"
                    ],
                    "description": "计划是否已启用"
                  },
                  "searchKey": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "在计划名称、描述与模板标题范围内模糊搜索"
                  },
                  "taskState": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "计划状态；0：待执行；1：执行中；2：执行完成 3：已取消\n"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "默认：1"
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "默认：10"
                  }
                }
              },
              "example": {
                "pageNo": 1,
                "pageSize": 10,
                "taskState": 0,
                "searchKey": "daily login",
                "enabled": true
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "成功。`data.dataList` 是当前页的记录，无匹配结果时为空数组；`data.total`、`data.current`、`data.pages` 描述分页信息。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码，0 表示成功，大于 0 表示失败"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求跟踪 ID"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "description": "日程编号"
                              },
                              "taskName": {
                                "type": "string",
                                "description": "计划任务名称"
                              },
                              "createMember": {
                                "type": "string",
                                "description": "成员姓名"
                              },
                              "enabled": {
                                "type": "boolean",
                                "description": "是否启用"
                              },
                              "endTime": {
                                "type": "string",
                                "description": "任务结束时间"
                              },
                              "failCount": {
                                "type": "integer",
                                "description": "执行失败次数"
                              },
                              "handleTime": {
                                "type": "string",
                                "description": "执行开始时间"
                              },
                              "notes": {
                                "type": "string",
                                "description": "日程安排说明"
                              },
                              "scheduleConfig": {
                                "type": "string",
                                "description": "任务计划配置"
                              },
                              "successCount": {
                                "type": "integer",
                                "description": "成功执行次数"
                              },
                              "taskPreviewTimeTable": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "cloudPhoneId": {
                                      "type": "string",
                                      "description": "云手机ID"
                                    },
                                    "cloudPhoneName": {
                                      "type": "string",
                                      "description": "云手机名称"
                                    },
                                    "times": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      },
                                      "description": "执行时间列表"
                                    }
                                  }
                                }
                              },
                              "taskState": {
                                "type": "integer",
                                "description": "计划任务状态：0：等待；1：运行；2：已完成；3：取消"
                              },
                              "templateId": {
                                "type": "string",
                                "description": "模板 ID"
                              },
                              "templateTitle": {
                                "type": "string",
                                "description": "模板标题"
                              }
                            },
                            "required": [
                              "createMember"
                            ]
                          },
                          "description": "计划清单"
                        },
                        "current": {
                          "type": "string",
                          "description": "当前页码"
                        },
                        "pages": {
                          "type": "string",
                          "description": "总页数"
                        },
                        "total": {
                          "type": "string",
                          "description": "总数"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "taskName": "example-name",
                        "createMember": "string",
                        "enabled": true,
                        "endTime": "2026-09-01 12:00:00",
                        "failCount": 1,
                        "handleTime": "2026-09-01 12:00:00",
                        "notes": "string",
                        "scheduleConfig": "string",
                        "successCount": 1,
                        "taskPreviewTimeTable": [
                          {
                            "cloudPhoneId": "1673823102599682",
                            "cloudPhoneName": "example-name",
                            "times": [
                              "2026-09-01 12:00:00"
                            ]
                          }
                        ],
                        "taskState": 1,
                        "templateId": "1673823102599682",
                        "templateTitle": "example-title"
                      }
                    ],
                    "current": "1",
                    "pages": "1",
                    "total": "1"
                  }
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/rpa/task/save": {
      "post": {
        "operationId": "saveCloudPhoneRpaTaskLocal",
        "summary": "创建计划",
        "deprecated": false,
        "description": "保存云手机计划任务。\n\ntemplateParameter Parameter Specification\n 1. __Parameter Source__\nParameter keys must be extracted from the `parameter` field returned by the following APIs:\n- Get market template pages\n- Get Personal template pages\n2.  __Data Structure__\n- Submit parameters in JSON object format: `{\"key1\": \"value1\", \"key2\": \"value2\"}`\n- Final parameter values must be deserialized according to business logic before use\n3. __Common Type Parameters__\nFor the following parameter types, pass values directly in the corresponding format:\n- string: `{\"name\": \"John\"}`\n- decimal / number: `{\"amount\": 100.50}`\n- boolean: `{\"enabled\": true}`\n4. __Media Type Parameters__\nFor media parameters such as image (pic) or video (video), in addition to basic information, a fixed key `\"__Extra__\"` must be included. Example format:\n```json\n{\n    \"__Extra__\": {\n        \"pic\": {\n            \"name\": \"pic_name\",\n            \"size\": 204800\n        },\n        \"video\": {\n            \"name\": \"video_name\",\n            \"size\": 204800000\n        }\n    },\n    \"pic\": \"https://get.morelogin.com/prod/cloudPhoneTaskVideo/1556061681934880/1c62314c7e2b4d298abe8d5452d7c050/test.png\",\n    \"video\": \"https://get.morelogin.com/pre/cloudPhoneTaskVideo/1542431036481556/4c4fed83685345ae8f1505fbe0c2f123/baby.mp4\"\n}\n```\n5. __Parameter Configuration Example__\nThe following example demonstrates how to configure the `templateParameter` parameter when saving a plan using a market template:\n- __Step 1: Retrieve Template Parameters__\nCall the Market Template API:\n`GET /api/cloudphone/rpa/template/market/page`\nExtract the `parameter` field from the response, for example:\n\n```json\n\"parameter\": \"{\\\"videoDownloadUrl\\\":{\\\"type\\\":\\\"video\\\",\\\"extra\\\":{\\\"name\\\":\\\"Select Video\\\",\\\"type\\\":\\\"video\\\",\\\"required\\\":true,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":1,\\\"sizeLimit\\\":{\\\"value\\\":200,\\\"unit\\\":\\\"MB\\\"},\\\"formatType\\\":[\\\"mp4\\\",\\\"mov\\\"]}},\\\"videoDescription\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Video Caption\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":1000},\\\"multiline\\\":{\\\"enabled\\\":true,\\\"value\\\":3},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":2}},\\\"coverUrl\\\":{\\\"type\\\":\\\"image\\\",\\\"extra\\\":{\\\"name\\\":\\\"Cover Image\\\",\\\"type\\\":\\\"image\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":3,\\\"sizeLimit\\\":{\\\"value\\\":5,\\\"unit\\\":\\\"MB\\\"},\\\"formatType\\\":[\\\"jpg\\\",\\\"png\\\",\\\"jpeg\\\"]}},\\\"enableAIGC\\\":{\\\"type\\\":\\\"boolean\\\",\\\"extra\\\":{\\\"name\\\":\\\"AI Label\\\",\\\"type\\\":\\\"boolean\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":4}},\\\"productId\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Product ID\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":50},\\\"placeholder\\\":\\\"Product ID only supports digits, with a maximum of 50 characters.\\\",\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":5}},\\\"productTitle\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Product Title\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":30},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":6}},\\\"getLeads\\\":{\\\"type\\\":\\\"boolean\\\",\\\"extra\\\":{\\\"name\\\":\\\"Get Leads\\\",\\\"type\\\":\\\"boolean\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":7}},\\\"comment\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Comment\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":200},\\\"multiline\\\":{\\\"enabled\\\":true,\\\"value\\\":3},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":8}}}\"\n```\n\n- __Step 2: Build the Parameter JSON__\nConstruct the JSON object according to the parameter requirements:\n```json\n{\n  \"__Extra__\": {\n    \"videoDownloadUrl\": {\n      \"name\": \"video_name.mp4\",\n      \"size\": 204800000\n    }\n  },\n  \"videoDownloadUrl\": \"https://get.morelogin.com/pre/cloudPhoneTaskVideo/1542431036481556/4c4fed83685345ae8f1505fbe0c2f123/baby.mp4\"\n}\n```\n- __Step 3: Escape the JSON String__\nConvert the JSON object into an escaped string format:\n```json\n\"{\\\"__Extra__\\\": {\\\"videoDownloadUrl\\\": {\\\"name\\\": \\\"video_name.mp4\\\",\\\"size\\\": 204800000}},\\\"videoDownloadUrl\\\": \\\"https://get.morelogin.com/pre/cloudPhoneTaskVideo/1542431036481556/4c4fed83685345ae8f1505fbe0c2f123/baby.mp4\\\"}\"\n```\n- __Step 4: API Call__\nPass the escaped string as the value of the `templateParameter` parameter to the target API.\n",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "taskName": {
                    "type": "string",
                    "description": "任务名称"
                  },
                  "templateId": {
                    "type": "string",
                    "description": "模板 ID"
                  },
                  "templateType": {
                    "type": "string",
                    "description": "模板类型。PERSONAL：个人；MARKET：市场"
                  },
                  "taskType": {
                    "type": "string",
                    "description": "任务类型。TEMPORARY 或 SCHEDULED"
                  },
                  "notes": {
                    "type": "string",
                    "description": "计划备注"
                  },
                  "cloudPhoneConfigs": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "cloudPhoneId": {
                          "type": "string",
                          "description": "云手机 ID"
                        },
                        "triggerTime": {
                          "type": "string",
                          "description": "任务执行时间，UTC+0 时区"
                        },
                        "templateParameter": {
                          "type": "string",
                          "description": "模板参数在个人模板或市场模板中定义。模板中的参数定义为：{\"Test\":{\"extra\":{\"type\":\"string\",\"required\":true,\"multiline\":{\"enabled\":false},\"name\":\"Test\",\"index\":1},\"type\":\"string\"}} 请求参数时，传递的参数为：{\"Test\":\"xxxx\"}"
                        }
                      },
                      "required": [
                        "cloudPhoneId",
                        "triggerTime",
                        "templateParameter"
                      ]
                    },
                    "description": "云手机计划配置集合"
                  },
                  "scheduleConfig": {
                    "type": "object",
                    "properties": {
                      "endTime": {
                        "type": "string",
                        "description": "日期时间"
                      },
                      "scheduleType": {
                        "type": "string",
                        "description": "计划类型。ONCE：一次性；DAILY：每日"
                      }
                    },
                    "required": [
                      "endTime",
                      "scheduleType"
                    ],
                    "description": "任务计划配置"
                  }
                },
                "required": [
                  "cloudPhoneConfigs",
                  "scheduleConfig",
                  "taskName",
                  "taskType",
                  "templateId",
                  "templateType"
                ]
              },
              "example": {
                "cloudPhoneConfigs": [
                  {
                    "cloudPhoneId": "1661515884160372",
                    "triggerTime": "string",
                    "templateParameter": "string"
                  }
                ],
                "scheduleConfig": {
                  "endTime": "string",
                  "scheduleType": "string"
                },
                "taskName": "example-name",
                "taskType": "string",
                "templateId": "1661515884160372",
                "templateType": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "成功。`data` 是单个整数值。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码，0 表示成功，>0 表示失败"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求跟踪 ID"
                    },
                    "data": {
                      "type": "integer",
                      "description": "计划 ID"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": 1
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/api/cloudphone/rpa/onceTask/save": {
      "post": {
        "operationId": "saveCloudPhoneRpaOneTimeTaskLocal",
        "summary": "创建一次性任务计划",
        "deprecated": false,
        "description": "保存云手机，任务已安排。\n\n模板参数 参数规范\n\n1. __参数来源__\n\n参数键必须从以下 API 返回的 `parameter` 字段中提取：\n\n- 获取市场模板页面\n\n- 获取个人模板页面\n\n2. __数据结构__\n\n- 以 JSON 对象格式提交参数：`{\"key1\": \"value1\", \"key2\": \"value2\"}`\n\n- 最终参数值必须根据业务逻辑在使用前进行反序列化\n\n3. __通用类型参数__\n\n对于以下参数类型，请直接以相应格式传递值：\n\n- 字符串：`{\"name\": \"John\"}`\n\n- 小数/数字：`{\"amount\": 100.50}`\n\n- 布尔值：`{\"enabled\": true}`\n\n4. __媒体类型参数__\n\n对于图像 (pic) 或视频 (video) 等媒体参数，除了基本信息外，还必须包含一个固定键 `\"__Extra__\"`。示例格式：\n\n```json\n{\n\"__Extra__\": {\n\n\"pic\": {\n\n\"name\": \"pic_name\",\n\n\"size\": 204800\n\n},\n\n\"video\": {\n\"name\": \"video_name\",\n\n\"size\": 204800000\n\n}\n},\n\n\"pic\": \"https://get.morelogin.com/prod/cloudPhoneTaskVideo/1556061681934880/1c62314c7e2b4d298abe8d5452d7c050/test.png\",\n\n\"video\": \"morelogin://cloudfile?ids=1,2\"\n\n}\n```\n如果文件已经上传到 MoreLogin 网盘，媒体或文件参数可以使用网盘文件协议作为参数值： `morelogin://cloudfile?ids=1,2`。`ids` 是网盘文件 ID 集合，多个 ID 使用英文逗号分隔。\n5. __参数配置示例__\n\n以下示例演示了在使用市场模板保存套餐时如何配置 `templateParameter` 参数：\n\n- __步骤 1：检索模板参数__\n\n调用市场模板 API：\n\n`GET /api/cloudphone/rpa/template/market/page`\n\n从响应中提取 `parameter` 字段，例如：\n\n```json\n\n\"parameter\": \"{\\\"videoDownloadUrl\\\":{\\\"type\\\":\\\"video\\\",\\\"extra\\\":{\\\"name\\\":\\\"Select视频\",\"type\":\"视频\",\"required\":true\",\"defaultValue\":{\"enabled\":false}\",\"index\":1\",\"sizeLimit\":{\"value\":200\",\"unit\":\"MB\"},\"formatType\":[\"mp4\",\"mov\"]}},\"videoDescription\":{\"type\":\"string\",\"extra\":{\"name\":\"视频\" “标题”\",“类型”:“字符串”\",“必填”:false,“字符有效”:{“启用”:true,“值”:1000},“多行”:{“启用”:true,“值”:3},“默认值”:{“启用”:false},“索引”:2}},“封面网址”:{“类型”:“图像”,“额外”:{“名称”:“封面” “图像”,“类型”:“图像”,“必填”:false,“默认值”:{“启用”:false},“索引”:3,“大小限制”:{“值”:5,“单位”:“MB”},“格式类型”:[“jpg”,“png”,“jpeg”]}},“启用AIGC”:{“类型”:“布尔值”,“附加信息”:{“名称”:“AI标签”,“类型”:“布尔值”,“必填”:false,“默认值”:{“启用”:false},“索引”:4}},“产品ID”:{“类型”:“字符串”,“附加信息”:{“名称”:“产品” ID\", \"type\": \"string\", \"required\": false\", \"charValid\": { \"enabled\": true, \"value\": 50}\", \"placeholder\": \"产品 ID 仅支持数字，最多 50 个字符。\", \"defaultValue\": { \"enabled\": false}, \"index\": 5}}, \"productTitle\": { \"type\": \"string\", \"extra\": { \"name\": \"产品标题\", \"type\": \"string\", \"required\": false, \"charValid\": { \"enabled\": true, \"value\": 30}, \"defaultValue\": { \"enabled\": false}, \"index\": 6}}, \"getLeads\": { \"type\": \"boolean\", \"extra\": { \"name\": \"获取Leads\\\",\\\"type\\\":\\\"boolean\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":7}},\\\"comment\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Comment\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":200},\\\"multiline\\\":{\\\"enabled\\\":true,\\\"value\\\":3},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":8}}}\"\n\n```\n\n- __步骤 2：构建参数 JSON__\n\n根据参数要求构建 JSON 对象：\n\n```json\n\n{\n\"__Extra__\": {\n\n\"videoDownloadUrl\": {\n\n\"name\": \"video_name.mp4\",\n\n\"size\": 204800000\n\n}\n},\n\n\"videoDownloadUrl\": \"morelogin://cloudfile?ids=1,2\"\n\n}\n```\n- __步骤 3：转义 JSON 字符串__\n\n将 JSON 对象转换为转义字符串格式：\n\n```json\n\n\"{\\\"__Extra__\\\":{\\\"videoDownloadUrl\\\":{\\\"name\\\":\\\"video_name.mp4\\\",\\\"size\\\":204800000}},\\\"videoDownloadUrl\\\":\\\"morelogin://cloudfile?ids=1,2\\\"}\"\n\n```\n\n- __步骤 4：API 调用__\n\n将转义后的字符串作为 `templateParameter` 参数的值传递给目标 API。\n\n已记录的业务错误码：`33814`, `33818`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "cloudPhoneId": {
                    "type": "string",
                    "description": "云手机ID"
                  },
                  "scheduleName": {
                    "type": "string",
                    "description": "日程名称"
                  },
                  "templateId": {
                    "type": "string",
                    "description": "模板 ID、个人模板或市场模板 ID"
                  },
                  "templateParameter": {
                    "type": "string",
                    "description": "模板参数在个人模板或市场模板中定义。模板中的参数定义如下：{\"Test\":{\"extra\":{\"type\":\"string\",\"required\":true,\"multiline\":{\"enabled\":false},\"name\":\"Test\",\"index\":1},\"type\":\"string\"}} 请求参数时，传递的参数为：{\"Test\":\"xxxx\"}"
                  },
                  "description": {
                    "type": "string",
                    "description": "日程安排说明"
                  }
                },
                "required": [
                  "cloudPhoneId",
                  "scheduleName",
                  "templateId"
                ]
              },
              "example": {
                "cloudPhoneId": "1678331966138097",
                "scheduleName": "test",
                "templateId": "1678347487160296",
                "templateParameter": "{\"keyword\": \"abc\"}",
                "description": "日程安排说明"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "成功。`data` 是单个整数值。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码，0 表示成功，大于 0 表示失败"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求跟踪 ID"
                    },
                    "data": {
                      "type": "integer",
                      "description": "日程编号"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": 1
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/rpa/task/cancel": {
      "post": {
        "operationId": "cancelCloudPhoneRpaTaskLocal",
        "summary": "取消日程",
        "deprecated": false,
        "description": "取消一个 RPA 计划，以及它下面所有未完成的执行。\n\n- **前置条件**：计划必须存在于你的团队。已完成的计划无法取消；已取消的返回成功但不做任何事。\n- **副作用**：计划**同步**标记为已取消，并为每个处于待执行、待下发、执行中或待检查的执行入队一个取消请求。\n- **完成信号**：混合。计划状态从 `/cloudphone/rpa/task/page` 读取，但单条执行要通过 `/cloudphone/rpa/subTask/page` 确认——已经在运行的执行是异步停止的，不会立刻停。\n- **重试**：幂等。",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "计划编号"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1678919049331329"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "成功。该接口的 `data` 恒为 null，结果由 `code` 表达。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码，0 表示成功，大于 0 表示失败"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求跟踪 ID"
                    },
                    "data": {
                      "type": "null"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": null
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/rpa/subTask/page": {
      "post": {
        "operationId": "listCloudPhoneRpaSubTasksLocal",
        "summary": "页面查询任务执行记录",
        "deprecated": false,
        "description": "分页列出单次 RPA 执行记录。\n\n- **副作用**：无。只读。可带退避安全重试。\n- **状态取值**：`taskState` 为 `0` 等待执行、`1` 正在执行、`2` 排队中、`3` 成功、`4` 失败、`5` 已取消。等待执行与排队中的区别在于该执行是否仍处于其原定触发时间。\n- **搜索注意**：按模板标题搜索会先用当前请求语言解析标题，因此与该语言不匹配的标题会返回空页，而不是返回全部执行记录。",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "taskId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "任务 ID"
                  },
                  "taskName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "任务名称",
                    "maxLength": 255,
                    "minLength": 1
                  },
                  "taskState": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "计划状态；0：等待执行；1：执行中；2：执行完成；3：取消",
                    "maximum": 9,
                    "minimum": 0
                  },
                  "templateId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "模板 ID",
                    "maximum": 99999999999,
                    "minimum": 0
                  },
                  "templateTitle": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "模板标题",
                    "maxLength": 255,
                    "minLength": 0
                  },
                  "cloudPhoneId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "云手机ID",
                    "example": "1559133625483282"
                  },
                  "cloudPhoneName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "云手机名称",
                    "maxLength": 100,
                    "minLength": 0
                  },
                  "beginTime": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "任务开始时间 UTC+0 时区",
                    "example": "2025-01-01 23:59:59"
                  },
                  "endTime": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "任务结束时间（UTC+0 时区）\n\n",
                    "example": "2025-01-02 23:59:59"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "默认值：1",
                    "example": 1
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "默认值：10"
                  }
                }
              },
              "example": {
                "pageNo": 1,
                "pageSize": 10
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "成功。`data.dataList` 是当前页的记录，无匹配结果时为空数组；`data.total`、`data.current`、`data.pages` 描述分页信息。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码，0 表示成功，大于 0 表示失败"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求跟踪 ID"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "dataList": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ExecutionDTO"
                          }
                        },
                        "current": {
                          "type": "string",
                          "description": "当前页码"
                        },
                        "pages": {
                          "type": "string",
                          "description": "总页数"
                        },
                        "total": {
                          "type": "string",
                          "description": "总数"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "taskName": "example-name",
                        "taskState": 1,
                        "cloudPhoneId": "1673823102599682",
                        "cloudPhoneName": "example-name",
                        "templateName": "example-name",
                        "handleFailCode": "string",
                        "handleFailReason": "string",
                        "handleResult": 1,
                        "handleResultAttachment": "string",
                        "handleTime": "2026-09-01 12:00:00",
                        "endTime": "2026-09-01 12:00:00",
                        "powerOnTime": "2026-09-01 12:00:00",
                        "triggerNextTime": "2026-09-01 12:00:00",
                        "triggerTime": "2026-09-01 12:00:00",
                        "createDate": "2026-09-01 12:00:00",
                        "createMember": "string",
                        "updateDate": "2026-09-01 12:00:00",
                        "updateMember": "2026-09-01 12:00:00"
                      }
                    ],
                    "current": "1",
                    "pages": "1",
                    "total": "1"
                  }
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/rpa/subTask/detail/{id}": {
      "post": {
        "operationId": "getCloudPhoneRpaSubTaskDetailLocal",
        "summary": "获取任务执行",
        "deprecated": false,
        "description": "返回单条 RPA 执行记录的详情。\n\n- **前置条件**：执行记录必须属于你的团队。若执行记录、其所属计划或其云手机已不存在，调用失败。\n- **副作用**：无。只读。可带退避安全重试。\n- **状态取值**：与 `/cloudphone/rpa/subTask/page` 同一套刻度。\n- **说明**：即使代理此后已被删除，也会解析出代理详情，因此历史执行仍能看到它当时用的是什么。",
        "tags": [
          "Schedules"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "执行任务 ID",
            "required": true,
            "example": 1678919049331331,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "taskId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "任务 ID"
                  },
                  "taskName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "任务名称",
                    "maxLength": 255,
                    "minLength": 1
                  },
                  "taskState": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "计划状态；0：等待执行；1：执行中；2：执行完成；3：取消",
                    "maximum": 9,
                    "minimum": 0
                  },
                  "templateId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "模板 ID",
                    "maximum": 99999999999,
                    "minimum": 0
                  },
                  "templateTitle": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "模板标题",
                    "maxLength": 255,
                    "minLength": 0
                  },
                  "cloudPhoneId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "云手机ID",
                    "example": "1559133625483282"
                  },
                  "cloudPhoneName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "云手机名称",
                    "maxLength": 100,
                    "minLength": 0
                  },
                  "beginTime": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "任务开始时间 UTC+0 时区",
                    "example": "2025-01-01 23:59:59"
                  },
                  "endTime": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "任务结束时间（UTC+0 时区）\n\n",
                    "example": "2025-01-02 23:59:59"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "默认值：1",
                    "example": 1
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "默认值：10"
                  }
                }
              },
              "example": {
                "taskId": null,
                "taskName": null,
                "taskState": null
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "成功。`data` 是对象，包含字段 `id`、`taskName`、`taskState`、`cloudPhoneId`、`cloudPhoneName`、`templateName`、…。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码，0 表示成功，大于 0 表示失败"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求跟踪 ID"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "执行记录 ID"
                        },
                        "taskName": {
                          "type": "string",
                          "description": "计划任务名称"
                        },
                        "taskState": {
                          "type": "integer",
                          "description": "计划状态；0：等待执行；1：正在执行；2：执行完成；3：取消"
                        },
                        "cloudPhoneId": {
                          "type": "string",
                          "description": "云手机ID"
                        },
                        "cloudPhoneName": {
                          "type": "string",
                          "description": "云手机名称"
                        },
                        "templateName": {
                          "type": "string",
                          "description": "模板标题"
                        },
                        "handleFailCode": {
                          "type": "string",
                          "description": "任务失败代码"
                        },
                        "handleFailReason": {
                          "type": "string",
                          "description": "任务失败原因"
                        },
                        "handleResult": {
                          "type": "integer",
                          "description": "任务结果：0：失败；1：成功"
                        },
                        "handleResultAttachment": {
                          "type": "string",
                          "description": "任务执行结果附件"
                        },
                        "handleTime": {
                          "type": "string",
                          "description": "执行时间"
                        },
                        "endTime": {
                          "type": "string",
                          "description": "任务结束时间"
                        },
                        "powerOnTime": {
                          "type": "string",
                          "description": "云手机开机时间"
                        },
                        "triggerNextTime": {
                          "type": "string",
                          "description": "下次预定触发时间"
                        },
                        "triggerTime": {
                          "type": "string",
                          "description": "计划触发时间"
                        },
                        "createDate": {
                          "type": "string",
                          "description": "创建时间"
                        },
                        "createMember": {
                          "type": "string",
                          "description": "创建人"
                        },
                        "updateDate": {
                          "type": "string",
                          "description": "最后更新时间"
                        },
                        "updateMember": {
                          "type": "string",
                          "description": "最后更新者"
                        }
                      }
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "id": "1673823102599682",
                    "taskName": "example-name",
                    "taskState": 1,
                    "cloudPhoneId": "1673823102599682",
                    "cloudPhoneName": "example-name",
                    "templateName": "example-name",
                    "handleFailCode": "string",
                    "handleFailReason": "string",
                    "handleResult": 1,
                    "handleResultAttachment": "string",
                    "handleTime": "2026-09-01 12:00:00",
                    "endTime": "2026-09-01 12:00:00",
                    "powerOnTime": "2026-09-01 12:00:00",
                    "triggerNextTime": "2026-09-01 12:00:00",
                    "triggerTime": "2026-09-01 12:00:00",
                    "createDate": "2026-09-01 12:00:00",
                    "createMember": "string",
                    "updateDate": "2026-09-01 12:00:00",
                    "updateMember": "2026-09-01 12:00:00"
                  }
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/rpa/subTask/cancel/{id}": {
      "post": {
        "operationId": "cancelCloudPhoneRpaSubTaskLocal",
        "summary": "取消执行",
        "deprecated": false,
        "description": "取消单次 RPA 执行，不影响它所属的计划。\n\n- **前置条件**：执行记录必须属于你的团队。已完成的无法取消；已取消的返回成功但不做任何事。\n- **副作用**：**只是把取消请求入队——本调用不写任何状态。** 计划继续运行，后续的执行不受影响。要停掉计划本身请用 `/cloudphone/rpa/task/cancel`。\n- **完成信号**：异步。请轮询 `/cloudphone/rpa/subTask/page` 或执行详情，直到状态变为已取消。已经在执行中的不会被立即停止。\n- **重试**：幂等；重复调用只是再次入队。",
        "tags": [
          "Schedules"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "计划编号"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1678919049331329"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "成功。该接口的 `data` 恒为 null，结果由 `code` 表达。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "响应代码，0 表示成功，大于 0 表示失败"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "错误信息"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "请求跟踪 ID"
                    },
                    "data": {
                      "type": "null"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": null
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudphone/touch/click": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "触控 - 单击",
        "description": "点按云手机屏幕上的一个坐标点。\n- **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型 支持；不兼容机型会拒绝该调用。\n- **坐标**：`pos` 必须恰好包含两个值 `[x, y]`。**不会校验是否超出屏幕分辨率**——越界坐标会原样传给设备服务。\n- **完成信号**：同步。`data.status` 为 `finish` 表示手势已完成，`pending` 表示设备服务已排队。部分机型始终返回 `finish`。没有可供轮询 `pending` 状态的接口。\n- **重试**：没有去重。两次调用就是两次点按，超时后盲目重试可能造成双击。\n- **说明**：这里接受 `duration` 但会忽略；只有长按会读取它。\n\n已记录的业务错误码：`33300`, `33301`, `33401`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "operationId": "touchClick",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchClickRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos": [
                  540,
                  960
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "操作成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/touch/doubleClick": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "触控 - 双击",
        "description": "双击云手机屏幕上的一个坐标点。\n- **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型 支持；不兼容机型会拒绝该调用。\n- **副作用**：在部分机型上由四个触摸事件模拟，间隔固定为 50/100/50 毫秒，因此点按节奏不可配置。`duration` 会被忽略。\n- **完成信号**：同步。`data.status` 为 `finish` 或 `pending`，与单次点按一致。\n- **重试**：没有去重；再次调用会再双击一次。\n\n已记录的业务错误码：`33300`, `33301`, `33401`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "operationId": "touchDoubleClick",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchClickRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos": [
                  540,
                  960
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "操作成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/touch/longClick": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "触控 - 长按",
        "description": "长按云手机屏幕上的一个坐标点。\n- **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型 支持；不兼容机型会拒绝该调用。\n- **取值**：`duration` 是按住时长（毫秒），上限 60000。**没有下限**，因此负值也能通过校验并被传给设备服务。在部分机型上省略 `duration` 时默认为 1000 毫秒。\n- **完成信号**：同步。`data.status` 为 `finish` 或 `pending`。\n- **重试**：没有去重；再次调用会再长按一次。\n\n已记录的业务错误码：`33300`, `33301`, `33401`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "operationId": "touchLongClick",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchClickRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos": [
                  540,
                  960
                ],
                "duration": 2000
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "操作成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/touch/swipe": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "触控 - 滑动",
        "description": "在云手机屏幕上从一点滑动到另一点。\n- **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型 支持；不兼容机型会拒绝该调用。\n- **取值**：`pos1` 是起点、`pos2` 是终点，各自恰好为 `[x, y]`。`duration` 是手势时长（毫秒），上限 60000；在部分机型上默认 300 毫秒，路径会被插值成五个中间移动事件。\n- **完成信号**：同步。`data.status` 为 `finish` 或 `pending`。\n- **重试**：没有去重；再次调用会再滑动一次。\n\n已记录的业务错误码：`33300`, `33301`, `33401`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "operationId": "touchSwipe",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchSwipeRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos1": [
                  540,
                  1500
                ],
                "pos2": [
                  540,
                  500
                ],
                "duration": 300
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "操作成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/cloudphone/touch/drag": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "触控 - 拖动",
        "description": "在云手机屏幕上从一点拖拽到另一点。\n- **前置条件**：云手机必须已开机且未被其他成员占用。仅兼容机型 支持；不兼容机型会拒绝该调用。\n- **说明**：**在部分机型上这与滑动是同一套实现**——服务端把拖拽直接转交给滑动逻辑，二者在该设备服务上无法区分。其他机型有独立的拖拽动作。\n- **完成信号**：同步。`data.status` 为 `finish` 或 `pending`。\n- **重试**：没有去重；再次调用会再拖拽一次。\n\n已记录的业务错误码：`33300`, `33301`, `33401`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。",
        "operationId": "touchDrag",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchSwipeRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos1": [
                  200,
                  500
                ],
                "pos2": [
                  800,
                  500
                ],
                "duration": 500
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "操作成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ResponseDataPageResultCloudPhoneAppDto": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "description": "状态码，0 表示成功",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "描述信息",
            "example": "Success"
          },
          "data": {
            "description": "响应数据",
            "$ref": "#/components/schemas/PageResultCloudPhoneAppDto"
          }
        }
      },
      "PageResultCloudPhoneAppDto": {
        "type": "object",
        "properties": {
          "total": {
            "type": "string",
            "description": "总记录数",
            "example": "15"
          },
          "current": {
            "type": "string",
            "description": "当前页码",
            "example": "1"
          },
          "pages": {
            "type": "string",
            "description": "总页数",
            "example": "2"
          },
          "dataList": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CloudPhoneAppDto"
            },
            "description": "团队应用列表"
          }
        }
      },
      "CloudPhoneAppDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "记录 ID",
            "example": "123456"
          },
          "appName": {
            "type": "string",
            "description": "应用名称",
            "example": "Facebook"
          },
          "packageName": {
            "type": "string",
            "description": "Android 包名",
            "example": "com.facebook.katana"
          },
          "versionName": {
            "type": "string",
            "description": "版本显示名",
            "example": "450.0.0.1"
          },
          "versionCode": {
            "type": "string",
            "description": "版本号",
            "example": "450000000"
          },
          "enabled": {
            "type": "boolean",
            "description": "是否启用",
            "example": true
          },
          "desc": {
            "type": "string",
            "description": "描述",
            "example": "Social media application"
          },
          "enableRoot": {
            "type": "boolean",
            "description": "是否开启ROOT",
            "example": false
          }
        }
      },
      "ApiAppRootOperateDto": {
        "type": "object",
        "required": [
          "id",
          "packageNames"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "云手机 ID",
            "example": "12345678"
          },
          "packageNames": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "允许获取 ROOT 权限的应用包名列表",
            "example": [
              "com.test"
            ]
          }
        }
      },
      "CloudPhoneSetProxyApiDto": {
        "type": "object",
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "云手机环境 ID 列表",
            "example": [
              "1558968155668507"
            ]
          },
          "uniqueIds": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "description": "云手机环境展示序号列表（未提供 envIds 时作为对应关系使用）",
            "example": [
              1001
            ]
          },
          "proxy": {
            "description": "代理设置",
            "$ref": "#/components/schemas/CloudPhoneProxyDto"
          }
        }
      },
      "CloudPhoneProxyDto": {
        "type": "object",
        "required": [
          "proxyIp",
          "proxyPort",
          "proxyProvider"
        ],
        "properties": {
          "proxyId": {
            "type": "string",
            "description": "代理配置 ID（大于 0 表示复用已有代理配置；为空或 <=0 表示使用后续的详细参数创建/更新代理信息）",
            "example": "10002"
          },
          "proxyIp": {
            "type": "string",
            "description": "代理服务器 IP 地址",
            "example": "192.168.1.100"
          },
          "proxyPort": {
            "type": "integer",
            "description": "代理服务器端口",
            "minimum": 1,
            "maximum": 65535,
            "example": 8080
          },
          "proxyName": {
            "type": "string",
            "maxLength": 600,
            "description": "代理配置名称/描述",
            "example": "test_proxy_01"
          },
          "proxyProvider": {
            "type": "integer",
            "description": "代理类型 0:http, 1:https, 2:socks5",
            "example": 2
          },
          "username": {
            "type": "string",
            "maxLength": 200,
            "description": "代理认证用户名",
            "example": "admin"
          },
          "password": {
            "type": "string",
            "maxLength": 100,
            "description": "代理认证密码",
            "example": "pwd123"
          },
          "refreshUrl": {
            "type": "string",
            "description": "刷新动态代理 IP 的 API 地址",
            "example": "http://api.proxy.com/refresh"
          },
          "country": {
            "type": "string",
            "description": "代理所在国家代码（如 CN、US）",
            "example": "US"
          },
          "state": {
            "type": "string",
            "description": "代理所在州/省",
            "example": "California"
          },
          "city": {
            "type": "string",
            "description": "代理所在城市",
            "example": "Los Angeles"
          }
        }
      },
      "CloudPhoneEnableRootApiDTO": {
        "type": "object",
        "required": [
          "id",
          "enableRoot"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "云手机 ID",
            "example": "1558968155668507"
          },
          "enableRoot": {
            "type": "boolean",
            "description": "是否开启全局系统级 ROOT 权限",
            "example": true
          }
        }
      },
      "CloudPhoneProfile": {
        "type": "object",
        "properties": {
          "abnormalStatus": {
            "type": "integer",
            "description": "异常状态：0-无异常；1-未激活；2-合约到期；3-超卖；4-已停用"
          },
          "adbInfo": {
            "description": "ADB 连接信息",
            "$ref": "#/components/schemas/AdbInfo"
          },
          "billingType": {
            "type": "integer",
            "description": "计费方式：0-免费；1-灵活订阅；2-按月付费"
          },
          "createDate": {
            "description": "创建时间",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "createMember": {
            "description": "创建者成员 ID",
            "type": "integer"
          },
          "createMemberName": {
            "description": "创建者成员名称",
            "type": "string"
          },
          "enableAdb": {
            "description": "是否启用 ADB",
            "type": "boolean"
          },
          "envName": {
            "type": "string",
            "description": "云手机名称"
          },
          "envRemark": {
            "type": "string",
            "description": "环境备注"
          },
          "envStatus": {
            "type": "integer",
            "description": "浏览器环境状态：0-新建 1-创建失败 2-停止 3-正在启动 4-启动 5-重置中"
          },
          "expireTime": {
            "type": "string",
            "description": "有效期"
          },
          "groupId": {
            "description": "分组 ID",
            "type": "string"
          },
          "groupName": {
            "description": "分组名称。云手机未分组时为 null",
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "description": "云手机 ID",
            "type": "string"
          },
          "androidId": {
            "type": "string",
            "description": "云手机 android id"
          },
          "gaid": {
            "type": "string",
            "description": "云手机 gaid"
          },
          "lastConnectDate": {
            "description": "最近连接时间",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "lastConnectMemberId": {
            "description": "最近连接成员 ID",
            "type": "string"
          },
          "lastConnectMemberName": {
            "description": "最近连接成员名称",
            "type": "string"
          },
          "lastStartDate": {
            "description": "最近开机时间",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "lastStartMemberId": {
            "description": "最近开机成员 ID",
            "type": "string"
          },
          "lastStartMemberName": {
            "description": "最近开机成员名称",
            "type": "string"
          },
          "proxy": {
            "description": "代理设置",
            "$ref": "#/components/schemas/ProxyInfo"
          },
          "proxyStatus": {
            "type": "integer",
            "description": "代理状态：0-未检测到；1-正在检测；2-检测失败；3-检测成功"
          },
          "supportAdb": {
            "description": "是否支持 ADB：0 = 否，1 = 是",
            "type": "boolean"
          },
          "tagInfos": {
            "description": "标签信息。未分配标签时为空数组",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "description": "标签 ID",
                  "type": "string"
                },
                "tagName": {
                  "description": "标签名称",
                  "type": "string"
                }
              },
              "required": [
                "id",
                "tagName"
              ]
            }
          },
          "updateDate": {
            "description": "更新时间",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "updateMember": {
            "description": "更新者成员 ID",
            "type": "integer"
          }
        }
      },
      "AdbInfo": {
        "type": "object",
        "description": "仅当云手机已开机（envStatus >= 4）时才能查询 ADB 信息；关机或启动中无法查询",
        "properties": {
          "adbIp": {
            "type": "string",
            "description": "adb ip"
          },
          "adbPassword": {
            "type": "string",
            "description": "adb 连接密码"
          },
          "adbPort": {
            "type": "string",
            "description": "adb端口"
          },
          "command": {
            "type": [
              "string",
              "null"
            ],
            "description": "ADB SSH 隧道连接命令"
          },
          "expireTime": {
            "type": [
              "string",
              "null"
            ],
            "description": "ADB 连接过期时间"
          },
          "remark": {
            "type": "string",
            "description": "故障备注信息"
          },
          "success": {
            "type": "integer",
            "description": "是否成功获取：1=是，0=否"
          }
        },
        "required": [
          "adbIp",
          "adbPassword",
          "adbPort",
          "remark",
          "success"
        ]
      },
      "ProxyInfo": {
        "type": "object",
        "properties": {
          "country": {
            "description": "国家",
            "type": "string"
          },
          "countryCode": {
            "description": "国家代码",
            "type": "string"
          },
          "createDate": {
            "description": "创建时间",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "delFlag": {
            "type": "integer",
            "description": "1 - 已删除 2 - 未删除"
          },
          "expiryTime": {
            "description": "过期时间",
            "type": "string"
          },
          "exportIp": {
            "description": "出口 IP 地址",
            "type": "string"
          },
          "groupId": {
            "description": "分组 ID",
            "type": "string"
          },
          "id": {
            "description": "ID",
            "type": "string"
          },
          "providerCode": {
            "description": "设备类型代码",
            "type": "string"
          },
          "proxyAreaCode": {
            "description": "代理所在区域代码",
            "type": "string"
          },
          "proxyCatagoryType": {
            "type": "integer",
            "description": "代理类型：0：站点组 1：云平台 2：自有IP 3：VPS 4：虚拟机"
          },
          "proxyCheckStatus": {
            "type": "integer",
            "description": "检测状态：0：待检测；1：检测成功；2：检测失败；3：未知错误"
          },
          "proxyInfo": {
            "description": "代理详情字符串",
            "type": "string"
          },
          "proxyIp": {
            "description": "代理服务器 IP 地址",
            "type": "string"
          },
          "proxyName": {
            "description": "代理配置名称",
            "type": "string"
          },
          "proxyPort": {
            "description": "代理服务器端口",
            "type": "integer"
          },
          "proxyRegionCode": {
            "description": "代理所在地区代码",
            "type": "string"
          },
          "proxyStatus": {
            "type": "integer",
            "description": "0-正常 1-待分配 2-升级中 3-已过期"
          },
          "proxySub": {
            "description": "代理订阅信息",
            "$ref": "#/components/schemas/ProxySubscription"
          },
          "proxyType": {
            "type": "integer",
            "description": "代理类型：0-http 1-https 2-socks5 4-Oxylabs 5-Proxys.io 6-GeoSurf 9-Oxylabsauto 10-Trogan 11-Shadowsocks 12-vmess"
          },
          "proxyTypeCode": {
            "description": "代理协议类型代码",
            "type": "string"
          },
          "regionKey": {
            "description": "云平台地区标识",
            "type": "string"
          },
          "releaseTime": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$",
            "description": "释放时间：如果已删除则为删除时间，如果已过期则为过期时间"
          },
          "uniqueId": {
            "description": "展示用的排序序号 ID",
            "type": "integer"
          }
        },
        "required": [
          "country",
          "countryCode",
          "createDate",
          "delFlag",
          "expiryTime",
          "exportIp",
          "groupId",
          "id",
          "providerCode",
          "proxyAreaCode",
          "proxyCatagoryType",
          "proxyCheckStatus",
          "proxyInfo",
          "proxyIp",
          "proxyName",
          "proxyPort",
          "proxyRegionCode",
          "proxyStatus",
          "proxySub",
          "proxyType",
          "proxyTypeCode",
          "regionKey",
          "releaseTime",
          "uniqueId"
        ]
      },
      "ProxySubscription": {
        "type": "object",
        "properties": {
          "activeRecordId": {
            "description": "生效中的订阅记录 ID",
            "type": "string"
          },
          "businessId": {
            "description": "代理服务业务 ID",
            "type": "string"
          },
          "createMember": {
            "description": "创建者成员 ID",
            "type": "integer"
          },
          "endTime": {
            "description": "结束时间",
            "type": "string"
          },
          "id": {
            "description": "订阅 ID",
            "type": "string"
          },
          "nextBillingTime": {
            "description": "下次计费/付款时间",
            "type": "string"
          },
          "startTime": {
            "description": "生效开始时间",
            "type": "string"
          },
          "subPayMethod": {
            "description": "订阅付款方式",
            "type": "string"
          },
          "subStatus": {
            "type": "integer",
            "description": "订阅状态：0-待定 1-已订阅 2-已取消"
          },
          "subType": {
            "type": "integer",
            "description": "订阅类型：1-代理 2-套餐"
          },
          "teamId": {
            "description": "团队 ID",
            "type": "string"
          }
        },
        "required": [
          "activeRecordId",
          "businessId",
          "createMember",
          "endTime",
          "id",
          "nextBillingTime",
          "startTime",
          "subPayMethod",
          "subStatus",
          "subType",
          "teamId"
        ]
      },
      "CloudPhoneDetail": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "云手机 id"
          },
          "androidId": {
            "type": "string",
            "description": "云手机 android id"
          },
          "gaid": {
            "type": "string",
            "description": "云手机 gaid"
          },
          "envName": {
            "type": "string",
            "description": "云手机名称"
          },
          "groupId": {
            "description": "分组 ID",
            "type": "string"
          },
          "groupName": {
            "description": "分组名称；未分组时为 null",
            "type": [
              "string",
              "null"
            ]
          },
          "skuId": {
            "description": "商品 SKU ID",
            "type": "string"
          },
          "tagInfos": {
            "description": "标签信息；无标签时返回空数组",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "description": "标签 ID",
                  "type": "string"
                },
                "tagName": {
                  "description": "标签名称",
                  "type": "string"
                }
              },
              "required": [
                "id",
                "tagName"
              ]
            }
          },
          "billingType": {
            "description": "计费方式：1 = 按分钟（按量），2 = 按月",
            "type": "integer"
          },
          "proxyStatus": {
            "description": "代理状态：0 = 未检测，1 = 检测中，2 = 检测失败，3 = 检测成功",
            "type": "integer"
          },
          "settings": {
            "description": "指纹高级设置",
            "type": "object",
            "properties": {
              "automaticGeo": {
                "type": "boolean"
              },
              "automaticLocation": {
                "type": "boolean"
              },
              "automaticLanguage": {
                "type": "boolean"
              },
              "longitude": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "latitude": {
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "required": [
              "automaticGeo",
              "automaticLocation",
              "automaticLanguage",
              "longitude",
              "latitude"
            ]
          },
          "device": {
            "description": "设备硬件信息",
            "type": "object",
            "properties": {
              "server": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "countryName": {
                "type": "string"
              },
              "rom": {
                "type": "integer"
              },
              "wifiBssid": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "bluetoothMac": {
                "type": "string"
              }
            },
            "required": [
              "server",
              "countryName",
              "rom",
              "wifiBssid",
              "bluetoothMac"
            ]
          },
          "proxy": {
            "description": "代理设置",
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "proxyName": {
                "type": "string"
              },
              "proxyIp": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "proxyName",
              "proxyIp"
            ]
          },
          "lastStartMemberId": {
            "description": "最近开机成员 ID",
            "type": "string"
          },
          "lastStartMemberName": {
            "description": "最近开机成员名称",
            "type": [
              "string",
              "null"
            ]
          },
          "lastStartDate": {
            "description": "最近开机时间",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "lastConnectMemberId": {
            "description": "最近连接成员 ID",
            "type": "string"
          },
          "lastConnectMemberName": {
            "description": "最近连接成员名称",
            "type": [
              "string",
              "null"
            ]
          },
          "lastConnectDate": {
            "description": "最近连接时间",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "envStatus": {
            "description": "环境状态：0 = 新建，1 = 创建失败，2 = 已关机，3 = 启动中，4 = 已开机，5 = 重置中，6 = 重启中，7 = 一键新机中",
            "type": "integer"
          },
          "abnormalStatus": {
            "description": "异常状态：0 = 正常，1 = 未激活，2 = 欠费，3 = 超卖，4 = 已停用",
            "type": "integer"
          },
          "expireTime": {
            "description": "过期时间",
            "type": "string"
          },
          "envRemark": {
            "description": "环境备注",
            "type": "string"
          },
          "createMember": {
            "description": "创建者成员 ID",
            "type": "string"
          },
          "updateMember": {
            "description": "更新者成员 ID",
            "type": "string"
          },
          "updateDate": {
            "description": "更新时间",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "createDate": {
            "description": "创建时间",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "createMemberName": {
            "description": "创建者成员名称",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "envName",
          "groupId",
          "skuId",
          "tagInfos",
          "billingType",
          "proxyStatus",
          "settings",
          "device",
          "proxy",
          "lastStartMemberId",
          "lastStartMemberName",
          "lastStartDate",
          "lastConnectMemberId",
          "lastConnectMemberName",
          "lastConnectDate",
          "envStatus",
          "abnormalStatus",
          "expireTime",
          "envRemark",
          "createMember",
          "updateMember",
          "updateDate",
          "createDate",
          "createMemberName"
        ]
      },
      "ExecutionDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "执行记录 ID"
          },
          "taskName": {
            "type": "string",
            "description": "计划任务名称"
          },
          "taskState": {
            "type": "integer",
            "description": "计划状态；0：等待执行；1：正在执行；2：执行完成；3：取消"
          },
          "cloudPhoneId": {
            "type": "string",
            "description": "云手机ID"
          },
          "cloudPhoneName": {
            "type": "string",
            "description": "云手机名称"
          },
          "templateName": {
            "type": "string",
            "description": "模板标题"
          },
          "handleFailCode": {
            "type": "string",
            "description": "任务失败代码"
          },
          "handleFailReason": {
            "type": "string",
            "description": "任务失败原因"
          },
          "handleResult": {
            "type": "integer",
            "description": "任务结果：0：失败；1：成功"
          },
          "handleResultAttachment": {
            "type": "string",
            "description": "任务执行结果附件"
          },
          "handleTime": {
            "type": "string",
            "description": "执行时间"
          },
          "endTime": {
            "type": "string",
            "description": "任务结束时间"
          },
          "powerOnTime": {
            "type": "string",
            "description": "云手机开机时间"
          },
          "triggerNextTime": {
            "type": "string",
            "description": "下次预定触发时间"
          },
          "triggerTime": {
            "type": "string",
            "description": "计划触发时间"
          },
          "createDate": {
            "type": "string",
            "description": "创建时间"
          },
          "createMember": {
            "type": "string",
            "description": "创建人"
          },
          "updateDate": {
            "type": "string",
            "description": "最后更新时间"
          },
          "updateMember": {
            "type": "string",
            "description": "最后更新者"
          }
        }
      },
      "ApiBatchAdbInfoDto": {
        "type": "object",
        "required": [
          "envIds"
        ],
        "properties": {
          "envIds": {
            "type": "array",
            "description": "环境 ID 列表，最多 200 个",
            "maxItems": 200,
            "minItems": 1,
            "items": {
              "type": "string"
            },
            "example": [
              "1674380838117474",
              "1675787900043353"
            ]
          }
        }
      },
      "ApiBatchAdbInfoResultDto": {
        "type": "object",
        "description": "批量 ADB 信息查询结果",
        "properties": {
          "id": {
            "type": "string",
            "description": "环境 ID"
          },
          "supportAdb": {
            "type": "boolean",
            "description": "是否支持 ADB"
          },
          "enableAdb": {
            "type": "boolean",
            "description": "启用 ADB：0 = 禁用，1 = 启用"
          },
          "envStatus": {
            "type": "integer",
            "description": "环境状态：\n- 0：新建\n- 1：创建失败\n- 2：已关机\n- 3：启动中\n- 4：已开机\n- 5：重置中\n- 6：重启中\n- 7：一键新机中"
          },
          "adbIp": {
            "type": [
              "string",
              "null"
            ],
            "description": "ADB 连接 IP 地址"
          },
          "adbPassword": {
            "type": [
              "string",
              "null"
            ],
            "description": "ADB 连接密码"
          },
          "adbPort": {
            "type": [
              "string",
              "null"
            ],
            "description": "ADB 连接端口"
          },
          "command": {
            "type": [
              "string",
              "null"
            ],
            "description": "ADB SSH 隧道连接命令"
          },
          "expireTime": {
            "type": [
              "string",
              "null"
            ],
            "description": "ADB 连接过期时间"
          },
          "remark": {
            "type": [
              "string",
              "null"
            ],
            "description": "备注信息。无法获取 ADB 信息时会给出原因：\n- 环境不存在\n- 环境未开机，无法查询 ADB 信息\n- 该环境不支持 ADB\n- 获取 ADB 信息失败"
          }
        }
      },
      "ResponseDataListApiBatchAdbInfoResultDto": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "description": "响应码，0 表示成功",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "响应消息",
            "example": "success"
          },
          "data": {
            "type": "array",
            "description": "ADB 信息列表，顺序与请求的 envIds 一致",
            "items": {
              "$ref": "#/components/schemas/ApiBatchAdbInfoResultDto"
            }
          }
        }
      },
      "TouchClickRequest": {
        "type": "object",
        "required": [
          "id",
          "pos"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "云手机 ID",
            "example": "1558968155668507"
          },
          "pos": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "minItems": 2,
            "maxItems": 2,
            "description": "点击坐标 [x, y]。坐标系以屏幕左上角为原点 (0, 0)。",
            "example": [
              540,
              960
            ]
          },
          "duration": {
            "type": "integer",
            "description": "按压持续时间（毫秒），用于长按。如果省略，则使用默认时长。",
            "example": 2000
          }
        }
      },
      "TouchSwipeRequest": {
        "type": "object",
        "required": [
          "id",
          "pos1",
          "pos2"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "云手机 ID",
            "example": "1558968155668507"
          },
          "pos1": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "minItems": 2,
            "maxItems": 2,
            "description": "起始坐标 [x, y]",
            "example": [
              540,
              1500
            ]
          },
          "pos2": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "minItems": 2,
            "maxItems": 2,
            "description": "结束坐标 [x, y]",
            "example": [
              540,
              500
            ]
          },
          "duration": {
            "type": "integer",
            "description": "滑动/拖动持续时间（毫秒）。值越大，操作越慢。",
            "example": 300
          }
        }
      },
      "TouchResultResponse": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "description": "状态码，0 表示成功",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "响应消息",
            "example": "success"
          },
          "data": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string",
                "description": "执行状态",
                "example": "finish"
              }
            }
          }
        }
      },
      "ResponseEnvelopeBase": {
        "type": "object",
        "required": [
          "code",
          "msg",
          "requestId"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "description": "Business result code; `0` indicates success",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "Error message; null when successful",
            "example": null
          },
          "requestId": {
            "type": "string",
            "description": "Request ID for troubleshooting",
            "example": "1d4f3ea968664593860b94b35d4ebf5e"
          }
        }
      },
      "MonthlyCloudPhoneSkuPrice": {
        "type": "object",
        "required": [
          "price",
          "period",
          "periodUnit"
        ],
        "properties": {
          "price": {
            "type": "integer",
            "minimum": 0,
            "description": "Configured price in US cents"
          },
          "period": {
            "type": "integer",
            "description": "Billing-period count returned by the product service"
          },
          "periodUnit": {
            "type": "string",
            "description": "Localized billing-period unit returned by the product service"
          },
          "priceDesc": {
            "type": [
              "string",
              "null"
            ],
            "description": "Localized display price, when configured"
          }
        }
      },
      "MonthlyCloudPhoneSku": {
        "type": "object",
        "required": [
          "skuId",
          "skuName",
          "prices"
        ],
        "properties": {
          "skuId": {
            "type": "string",
            "description": "Monthly Cloud Phone product ID"
          },
          "skuName": {
            "type": "string",
            "description": "Product name returned in the product-service language"
          },
          "cloudPhoneAndroidVersion": {
            "type": [
              "string",
              "null"
            ],
            "description": "Android version, or null when the product has no configured value"
          },
          "cloudPhoneStorage": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Storage capacity in GB, or null when the product has no configured value"
          },
          "prices": {
            "type": "array",
            "minItems": 1,
            "description": "Active monthly price configurations",
            "items": {
              "$ref": "#/components/schemas/MonthlyCloudPhoneSkuPrice"
            }
          }
        }
      },
      "MonthlyCloudPhoneActivateRequest": {
        "type": "object",
        "required": [
          "ids"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "minItems": 1,
            "maxItems": 10,
            "uniqueItems": true,
            "description": "One to ten distinct positive Cloud Phone IDs, encoded as strings to preserve 64-bit precision",
            "items": {
              "type": "string",
              "pattern": "^[1-9][0-9]*$"
            }
          }
        }
      },
      "MonthlyCloudPhoneActivationResult": {
        "type": "object",
        "required": [
          "id",
          "status"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Cloud Phone ID"
          },
          "status": {
            "type": "string",
            "enum": [
              "ACTIVATED",
              "FAILED",
              "UNKNOWN"
            ],
            "description": "Activation result"
          },
          "expireTime": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[0-9]+$",
            "description": "Unix time in milliseconds; present for a successful activation"
          },
          "errorCode": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Business error code for a failed item"
          }
        }
      },
      "MonthlyCloudPhoneActivationData": {
        "type": "object",
        "required": [
          "orderId",
          "orderStatus",
          "results"
        ],
        "properties": {
          "orderId": {
            "type": "string",
            "description": "Paid balance-order ID"
          },
          "orderStatus": {
            "type": "integer",
            "enum": [
              1
            ],
            "description": "Order status; 1 means completed"
          },
          "results": {
            "type": "array",
            "description": "One result per requested ID, in request order",
            "items": {
              "$ref": "#/components/schemas/MonthlyCloudPhoneActivationResult"
            }
          }
        }
      },
      "CloudPhoneLiveStartRequest": {
        "type": "object",
        "required": [
          "phoneId",
          "fileId"
        ],
        "properties": {
          "phoneId": {
            "type": "string",
            "description": "Cloud phone ID",
            "example": "190000000000000001"
          },
          "fileId": {
            "type": "string",
            "description": "ID of an uploaded MP4 live-streaming file (`uploadType=2`)",
            "example": "820000000000000001"
          }
        }
      },
      "CloudPhoneLivePhoneRequest": {
        "type": "object",
        "required": [
          "phoneId"
        ],
        "properties": {
          "phoneId": {
            "type": "string",
            "description": "Cloud phone ID",
            "example": "190000000000000001"
          }
        }
      }
    },
    "securitySchemes": {},
    "responses": {
      "BalanceResponse": {
        "description": "Request processed; inspect `code` for the business result",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "required": [
                        "balance",
                        "remainingDuration",
                        "remainingConcurrency"
                      ],
                      "properties": {
                        "balance": {
                          "type": "integer",
                          "format": "int32",
                          "description": "Available wallet balance in cents"
                        },
                        "remainingDuration": {
                          "type": "string",
                          "pattern": "^[0-9]+$",
                          "description": "Remaining cloud phone duration in minutes, serialized as a numeric string"
                        },
                        "remainingConcurrency": {
                          "type": "integer",
                          "minimum": 0,
                          "description": "Remaining team-level cloud phone concurrency"
                        }
                      }
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": {
                "balance": 12500,
                "remainingDuration": "120",
                "remainingConcurrency": 3
              },
              "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
            }
          }
        }
      },
      "MonthlyCloudPhoneSkusResponse": {
        "description": "Request processed; `data` is an empty array when no monthly product is available",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MonthlyCloudPhoneSku"
                      }
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": [
                {
                  "skuId": "10015",
                  "skuName": "Android 14",
                  "cloudPhoneAndroidVersion": "Android 14",
                  "cloudPhoneStorage": 64,
                  "prices": [
                    {
                      "price": 2500,
                      "period": 30,
                      "periodUnit": "days",
                      "priceDesc": "$25/30 days"
                    }
                  ]
                }
              ],
              "requestId": "36d574df5b9e41b5b3c796133ff5a079"
            }
          }
        }
      },
      "MonthlyCloudPhoneActivateResponse": {
        "description": "Request processed; inspect `code`, and inspect `data.results` when returned",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MonthlyCloudPhoneActivationData"
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": {
                "orderId": "1724032801202461",
                "orderStatus": 1,
                "results": [
                  {
                    "id": "1724032706822188",
                    "status": "ACTIVATED",
                    "expireTime": "1791103955843",
                    "errorCode": null
                  }
                ]
              },
              "requestId": "db5e04c2eb804cdfb96b1469c7379bbc"
            }
          }
        }
      },
      "CloudPhoneLiveBooleanResponse": {
        "description": "Request processed; inspect `code` for the business result",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "boolean",
                      "description": "Whether the live-streaming operation succeeded"
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": true,
              "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
            }
          }
        }
      },
      "CloudPhoneLiveStatusResponse": {
        "description": "Request processed; inspect `code` for the business result",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "liveStatus": {
                          "type": "integer",
                          "enum": [
                            0,
                            1
                          ],
                          "description": "Live status (`0` = stopped, `1` = running)"
                        },
                        "writeFileId": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Current file ID, when available"
                        },
                        "liveFilePath": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Current file path or URL, when available"
                        }
                      }
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": {
                "liveStatus": 1,
                "writeFileId": "820000000000000001",
                "liveFilePath": null
              },
              "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
            }
          }
        }
      }
    }
  },
  "servers": [
    {
      "url": "http://127.0.0.1:40000",
      "description": "MoreLogin Local 端点"
    }
  ],
  "security": []
}